skrypt js liczący średnią wartości checkboxów

0

Witam

mam pytania do poniższego kodu.

  1. Jak zrobić aby po zaznaczeniu przycisku "Wszyscy" oprócz zaznaczeniu wszystkich checkboxów liczyło także dla nich średnią poniżej? I w druga stronę, po wyczyszczeniu czyściło wartość średniej.
  2. Jak zmodyfikować kod, aby liczba zaznaczonych checkboxów pojawiała się bez pola tekstowego, w miejscu Zaznaczono2?
  3. Czy istnieje możliwość aby po odznaczeniu wszystkich checkboxów w wyniku średniej nie pojawiało się "NaN"?
  4. Czy jeśli na liście checkboxów byłoby wiecej imion, to czy da sie ustawić aby w każdym wierszu było ich maksymalnie np. 5?

Kod może być trochę rozbudowany i część rzeczy moze byc wykonane okrężną drogą, ponieważ to kod zapożyczony i zmodyfikowany do moich potrzeb. Z góry dziękuję za pomoc.

<script>

function licz1(form) {
var zaznaczone1 = 0;
var limit = 50;
var max = gospodarz.gp.length;
for (var idx = 0; idx < max; idx++) {
if (eval("document.gospodarz.gp[" + idx + "].checked") == true) {
zaznaczone1 += 1;
}
}
document.getElementById("check1").value=zaznaczone1;
}
zaznaczone1=0; //jeśli jakieś checkboxy są domyślnie zaznaczone, to tu wpisać ich liczbę 
max=50;
function sprawdz1(ktory1) {
if(!ktory1.checked) zaznaczone1--; else if(zaznaczone1==max) {ktory1.checked=0; alert('[komunikat...]');} else zaznaczone1++;
}
var sum1 = 0;
    function sumAddresses1(element) {
      if(element.checked === true) {
        sum1 += parseFloat(element.value);
      } else {
        sum1 -= parseFloat(element.value);
      }
      document.getElementById('sumAmount1').innerHTML = (sum1/zaznaczone1).toFixed(2); // obliczanie średniej
    }
	function checkboxes1(){
       var inputElems = document.getElementsByTagName("input"),
       count = 0;
       for (var i=0; i<inputElems.length; i++) {
       if (inputElems[i].type === "checkbox1" && inputElems[i].checked === true){
           count++;
           alert(count);
		document.getElementById('checkboxess1').innerHTML = sum1;
       }
}}
function makeCheck(thisForm)
{
for (i = 0; i < thisForm.gp.length; i++)
{
thisForm.gp[i].checked=true
}
}
function makeUncheck(thisForm)
{
for (i = 0; i < thisForm.gp.length; i++)
{
thisForm.gp[i].checked=false
}
}
</script>

<div style="width:450px; background-color:white; float:left; margin-left:25px">
<form method="post" name=gospodarz>
<b>Klasa 2a</b><br><br>
<input type="button" value="Wszyscy" onclick="makeCheck(this.form;)">
<input type="button" value="Wyczyść" onclick="makeUncheck(this.form)">
<br><br>
<u>Chłopcy:</u>
<br><label><input type="checkbox" name="gp" value="3" onclick="licz1(this.form);sprawdz1(this);sumAddresses1(this)" />Maciek</label>
<label><input type="checkbox" name="gp" value="4" onclick="licz1(this.form);sprawdz1(this);sumAddresses1(this)" />Radek</label>
<label><input type="checkbox" name="gp" value="5" onclick="licz1(this.form);sprawdz1(this);sumAddresses1(this)" />Wojtek</label>

<br><br>Zaznaczono1:<input id="check1" type="text" size="1">
<br>Zaznaczono2 :<div id="check1"></div><br><b>Średnia </b>
<b><div id="sumAmount1"></div></b>
</form></body>
</div>

1

Co to jest średnia wartości checkboxów?

0

@Freja Draco: Każdy z checkboxów ma wczesniej zadaną wartość -value. Na średniej z tych wartości mi właśnie zależy :)

<br><label><input type="checkbox" name="gp" value="3" onclick="licz1(this.form);sprawdz1(this);sumAddresses1(this)" />Maciek</label>
<label><input type="checkbox" name="gp" value="4" onclick="licz1(this.form);sprawdz1(this);sumAddresses1(this)" />Radek</label>
<label><input type="checkbox" name="gp" value="5" onclick="licz1(this.form);sprawdz1(this);sumAddresses1(this)" />Wojtek</label>
1
tab_czekboksy = document.querySelectorAll("INPUT[type='checkbox']");
suma_czekboksow = 0;
for (i=0; i<tab_czekboksy.length; i++) {suma_czekboksow += tab_czekboksy[i].value * 1;}
srednia_czekboksow = suma_czekboksow / tab_czekboksy.length;

1 użytkowników online, w tym zalogowanych: 0, gości: 1