Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zliczanie elementów tablicy checkboksów
Marr
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam, mam problem. Chciałbym, żeby ktoś z Was podpowiedział mi jak mógłbym sobie napisać funkcję która zliczy mi zaznaczone checkboxy w tablicy. Checkboxy dodaję sobie dynamicznie. Oto funkcja dodająca checkboxy :
Kod
function dodaj_element(kontener){
    //    var szkolenia = new Object();
    //    for (var i=0; i<<?php echo $licznik;?>; i++ ){
    //    szkolenia[i] = "<input type='checkbox' name='szkolenie"+i+"[]' value='zaznaczony' />";            
    //    }
        var znacznik = document.createElement("input");
        znacznik.setAttribute("type", "text");
        znacznik.setAttribute("name", "uczestnicy[" + (index-1) + "]");
        znacznik.setAttribute("style","margin-top:5px");
        znacznik.className = "uczestnik";
        var znacznik2 = document.createElement("input");
        znacznik2.setAttribute("type", "text");
        znacznik2.setAttribute("name", "stanowiska[]");
        znacznik2.setAttribute("style","margin-top:5px");
        znacznik2.className = "stanowisko";
        var znacznik3 = document.createElement("input");
        znacznik3.setAttribute("type", "text");
        znacznik3.setAttribute("name", "stanowiska[]");
        znacznik3.setAttribute("style","margin-top:5px");
        znacznik3.className = "stanowisko";
        var odstep = document.createElement("div");
        odstep.setAttribute("style","clear:both");
        var etykieta = document.createElement("div");
        etykieta.setAttribute("style", "float: left; margin-left:20px; margin-right:10px; margin-top:5px;");
        etykieta.innerHTML= index + ". Imie i nazwisko: ";
        var etykieta2 = document.createElement("div");
        etykieta2.setAttribute("style", "float: left; margin-left:20px; margin-right:10px; margin-top:5px;");
        etykieta2.innerHTML="Stanowisko: ";
        var etykieta3 = document.createElement("div");
        etykieta3.setAttribute("style", " float: left; margin-left:20px; margin-right:10px; margin-top:5px;");
        etykieta3.innerHTML="Zapisz na szkolenia: ";
        var proba = document.createElement("span");
        proba.setAttribute("style","float:left; margin-top:5px")
        for (var j=0; j<<?php echo $licznik;?>; j++){
        proba.innerHTML+="&nbsp;&nbsp;&nbsp;"+(j+1)+". <input type='checkbox' name='szkolenie"+j+"[]' value="+(index-1)+" onClick='licz()' checked='checked' />";
        }
        
    
        
        var kontener = document.getElementById(kontener);
        kontener.appendChild(odstep);
        kontener.appendChild(etykieta);
        kontener.appendChild(znacznik);
        kontener.appendChild(etykieta2);
        kontener.appendChild(znacznik2);
        kontener.appendChild(etykieta3);
        kontener.appendChild(proba);
    
        index++;
        id++;
        }


i teraz chciałbym policzyć wszystkie zaznaczone checkboxy w tablicy szkolenie"+j+"[] - da się w ogóle coś takiego zrobić? nie mam pomysłu. Proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Proponowałbym zainteresować się biblioteką jquery.
Samo zliczenie zaznaczonych checkboxów możesz zrobić mniej więcej tak:
  1. <a href="#" id="sprawdz" >sprawdz</a>
  2. <div id="kontener">tutaj Twoje checkboxy</div>
  3. <div id="ilosc"></div>
  4. <script type="text/javascript">
  5. // wywolanie funkcji (np po kliknieciu w przycisk)
  6. $(document).ready(function(){
  7. $("#sprawdz").click(
  8. var checked_box=0;
  9. $("#kontener").find("input[@type$='checkbox']").each(function(){if(this.checked)checked_box++;});
  10. $("#ilosc").html('zaznaczonych:' + checked_box);
  11. });
  12. });
Go to the top of the page
+Quote Post
Marr
post
Post #3





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


przyznam, że jQuery jeszcze mnie troche przeraża. W zasadzie zaczynam dopiero z js i stad to wszystko. Zaraz poeksperymentuje z Twoja propozycja, za która bardzo dziekuje. Jakby ktoś jeszcze miał jakieś inne rozwiązanie to też poprosze.

EDIT: Aha jeszcze mnie zastanawia jedna sprawa. Czy jezeli zapisuje sobie checkboxy do tablicy to czy nie mógłbym skorzystać z .length zeby zliczyć elementy tej tablicy? Próbuję ale nie bardzo chce działać. całość mojego "skryptu" wyglada tak :

Kod
<script type="text/javascript">

         <!--
         var index = 2;
         var id = 0;
        
         function dodaj_element(kontener){
     //    var szkolenia = new Object();
     //    for (var i=0; i<<?php echo $licznik;?>; i++ ){
     //    szkolenia[i] = "<input type='checkbox' name='szkolenie"+i+"[]' value='zaznaczony' />";            
     //    }
         var znacznik = document.createElement("input");
         znacznik.setAttribute("type", "text");
         znacznik.setAttribute("name", "uczestnicy[" + (index-1) + "]");
         znacznik.setAttribute("style","margin-top:5px");
         znacznik.className = "uczestnik";
         var znacznik2 = document.createElement("input");
         znacznik2.setAttribute("type", "text");
         znacznik2.setAttribute("name", "stanowiska[]");
         znacznik2.setAttribute("style","margin-top:5px");
         znacznik2.className = "stanowisko";
         var znacznik3 = document.createElement("input");
         znacznik3.setAttribute("type", "text");
         znacznik3.setAttribute("name", "stanowiska[]");
         znacznik3.setAttribute("style","margin-top:5px");
         znacznik3.className = "stanowisko";
         var odstep = document.createElement("div");
         odstep.setAttribute("style","clear:both");
         var etykieta = document.createElement("div");
         etykieta.setAttribute("style", "float: left; margin-left:20px; margin-right:10px; margin-top:5px;");
         etykieta.innerHTML= index + ". Imie i nazwisko: ";
         var etykieta2 = document.createElement("div");
         etykieta2.setAttribute("style", "float: left; margin-left:20px; margin-right:10px; margin-top:5px;");
         etykieta2.innerHTML="Stanowisko: ";
         var etykieta3 = document.createElement("div");
         etykieta3.setAttribute("style", " float: left; margin-left:20px; margin-right:10px; margin-top:5px;");
         etykieta3.innerHTML="Zapisz na szkolenia: ";
         var proba = document.createElement("span");
         proba.setAttribute("style","float:left; margin-top:5px")
         for (var j=0; j<<?php echo $licznik;?>; j++){
         proba.innerHTML+="&nbsp;&nbsp;&nbsp;"+(j+1)+". <input type='checkbox' name='szkolenie"+j+"[]' value="+(index-1)+" onClick='licz()' checked='checked' />";
         }
        
    
        
         var kontener = document.getElementById(kontener);
         kontener.appendChild(odstep);
         kontener.appendChild(etykieta);
         kontener.appendChild(znacznik);
         kontener.appendChild(etykieta2);
         kontener.appendChild(znacznik2);
         kontener.appendChild(etykieta3);
         kontener.appendChild(proba);
    
         index++;
         id++;
         }
        
         var suma=0;  
         function licz() {
         var cashHolder = document.getElementById("cash");
         for (var j=0; j<<?php echo $licznik;?>; j++){
             for (var i=0; i<index; i++){
             var licznik = document.getElementsByName("szkolenie"+j+"["+i+"]");
         suma+=licznik;
             }
         }
         cashHolder.innerHTML=suma;
        
}
         //-->
        
        
     </script>


ma to w ogóle jakiś sens?


edit2: sama funkcja zliczająca moje tablice checkboksów wygląda teraz tak, narazie nie korzystam z Twojego rozwiązania Vokiel, bo nie ukrywam, ze moje jest bardziej w moim toku myślenia, Twojego nie do konca rozumiem. Możecie mi powiedzieć dlaczego taka funkcja nie zlicza poprawnie? daje mi ciągle 0. ;/

Kod
    function licz() {
        var licznik =0;
        var cashHolder = document.getElementById("cash");
        for (var j=0; j<<?php echo $licznik;?>; j++){
            for (var i=0; i<index; i++){
                var stan = document.getElementsByName("szkolenie"+j+"["+i+"]").checked;
                if (stan == true) {
                licznik++;
        suma+=licznik;}
        }
        cashHolder.innerHTML=suma;
        }
}


Ten post edytował Marr 6.01.2009, 13:22:53
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Zobacz tak:
  1. function licz() {
  2. var licznik =0;
  3. var cashHolder = document.getElementById("cash");
  4. for (var j=0; j<<?php echo $licznik;?>; j++){
  5. for (var i=0; i<index; i++){
  6. var stan = document.getElementsByName("szkolenie"+j+"["+i+"]").checked;
  7. if (stan == true) {
  8. licznik++;
  9. }
  10. suma+=licznik;
  11. }
  12. }
  13. cashHolder.innerHTML=suma;
  14. }

Sprawdzaj poprzez alert san licznikow, bo moze się nie zwiększyły.
Go to the top of the page
+Quote Post
Marr
post
Post #5





Grupa: Zarejestrowani
Postów: 103
Pomógł: 1
Dołączył: 19.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


kurcze nadal coś mi nie działa ;/ wydaje mi się ze problem dotyczy
  1. var stan = document.getElementsByName("szkolenie"+j+"["+i+"]").checked;


ponieważ jak za kazdym wywolaniem funkcji wyswietlam sobie alertem zmienna stan to zawsze jest undefinied - jakies pomysly?
Go to the top of the page
+Quote Post
vokiel
post
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Skoro literujemy przez tablicę, to trzeba po id. Tylko uprzednio trzeba tą właściwośc ustawic przy generowaniu formularza
  1. var stan = document.getElementById("szkolenie"+j+"["+i+"]").checked;
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 18:57