• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Zaznaczenie i odznaczenie chceckboxow, ale tylko w jednym formularzu

Object Storage Arubacloud
0 głosów
1,340 wizyt
pytanie zadane 26 lutego 2018 w JavaScript przez hiper007 Stary wyjadacz (11,270 p.)
zamknięte 27 lutego 2018 przez hiper007

Witam!

Chciałbym, żeby móc zaznaczyć wszystkie chceckboxy i je odznaczyć, ale tylko w jednym formularzu. Mam dwie wersje:

Pierwsza zaznacza wszystkie checkboxy na stronie:

function selectAll(x,b) { 
   if (typeof(x)=='string')x=document.getElementById(x);
   else { 
      while(x=x.parentNode) {
         if (x.nodeName.toLowerCase()=='form')break;
      }
   }
   var ins=x.getElementsByTagName("input"); 
   for(j=0;j<ins.length;j++) { 
      if(ins[j].type.toLowerCase()=="checkbox") { 
         ins[j].checked=b; 
      } 
   } 
}

 

<form method="POST" class="form-inline" role="form">
<input type="button" onClick="selectAll(this,true)" value="zaznacz wszystkie" /><br>
<input type="button" onClick="selectAll(this)" value="odznacz wszystkie" /><br>
</form>

ALE nie oto mi chodzi. Ja chcę zaznaczyć tylko w jednym formularzu. Ten powyżej działa poprawnie

Druga zaznacza wszystkie checkboxy w jednym formularzu:

function selectAll(x,b) { 
   if (typeof(x)=='string')x=document.getElementById(x);
   else { 
      while(x=x.parentNode) {
         if (x.nodeName.toLowerCase()=='form')break;
      }
   }
   var ins=x.getElementsByTagName("input"); 
   for(j=0;j<ins.length;j++) { 
      if(ins[j].type.toLowerCase()=="checkbox") { 
         ins[j].checked=b; 
      } 
   } 
}

 

<form name="aaa" method="POST" class="form-inline" role="form">
<input type="button" onClick="selectAll('aaa',true)" value="zaznacz wszystkie" /><br>
<input type="button" onClick="selectAll('aaa')" value="odznacz wszystkie" /><br>
</form>

i ten nie działa właśnie... czy może mi ktos powiedzieć gdzie jest błąd??

komentarz zamknięcia: Problem rozwiązany
1
komentarz 26 lutego 2018 przez gremlin Dyskutant (7,600 p.)
Wkleiłeś dwa razy tą samą funkcję.
komentarz 26 lutego 2018 przez hiper007 Stary wyjadacz (11,270 p.)

Jak przerobić tą funkcję, żeby zaznaczała checkboxy tylko z jednego formularza??

<form name="aaa" method="POST" class="form-inline" role="form">
<input type="button" onClick="selectAll('aaa',true)" value="zaznacz wszystkie" /><br>
<input type="button" onClick="selectAll('aaa')" value="odznacz wszystkie" /><br>
</form>

 

1
komentarz 26 lutego 2018 przez gremlin Dyskutant (7,600 p.)
Chodzi Ci o to, że masz dwa formularze a w nich checkboxy i przyciski którymi można je zaznaczyć/odznaczyć, dobrze rozumiem?
komentarz 26 lutego 2018 przez hiper007 Stary wyjadacz (11,270 p.)
Dokładnie tak. Mam dwa formularze ;) i checkboxy w obu.

Problem w tym, że jak chcę zaznaczyć tylko w jednym formularzu to zaznaczają mi się w obu tzn. we wszystkich formularzach jakie mam na stronie. Maja się zaznaczać tylko w jednym.

2 odpowiedzi

+1 głos
odpowiedź 26 lutego 2018 przez gremlin Dyskutant (7,600 p.)
wybrane 27 lutego 2018 przez hiper007
 
Najlepsza

Aby nie brnąc w ten kod stworzyłem sytuację o którą wydaje mi się, że chodzi. Nie jest to może optymalna wersja, ale mam nadzieję czytelna.

https://codepen.io/Nilmerg/pen/yvROgy?editors=1010

Co do Twojej funkcji. Nie powinno się dodawać "inline" funkcji do elementów (czyli bezpośrednio w kodzie html).

Przycisk można by zrobić również tylko jeden i zamieniać jedynie jego tekst po kliknięciu.

Trochę chaotycznie chodzisz po DOM (aczkolwiek mi też się zdarza :) )

 

komentarz 26 lutego 2018 przez hiper007 Stary wyjadacz (11,270 p.)

Zrobiłem tak ;)

function makeCheck(thisForm)
{

for (i = 0; i < thisForm.all.length; i++)
{
thisForm.all[i].checked=true
}

}

function makeUncheck(thisForm)
{

for (i = 0; i < thisForm.all.length; i++)
{
thisForm.all[i].checked=false
}
<form method="POST" action="mod_box.php" class="form-inline" role="form">

<input id="all"  type="checkbox" style="width: 20px; height: 20px;">
<input id="all"  type="checkbox" style="width: 20px; height: 20px;">
<input id="all"  type="checkbox" style="width: 20px; height: 20px;">

<input type="button" value="Zaznacz" onclick="makeCheck(this.form)" class="btn checkall"> 
<input type="button" value="Odznacz" onclick="makeUncheck(this.form)" class="btn uncheckall">

</form>

Wszystko ładnie działa ;) ale zaznacza mi dopiero jak w formularzu jest więcej niż jeden chackbox. Jak jest jeden to nie chce mi zaznaczyć... Zapewne w kodzie js trzeba było coś poprawić... Wiesz może gdzie?? ;) Z góry dzięki ;)

1
komentarz 26 lutego 2018 przez xmentor Nałogowiec (49,520 p.)

ID powinno być unikalne, a u Ciebie wszystkie checkbox-y mają te same ID. Nadaj im taką samą klasę i w JS użyj np. querySelectorAll.

To:

i = 0;

powoduje, że i jest zmienną globalną - użyj let.

Niepotrzebnie mieszasz warstwy, do podpięcia eventu powinieneś skorzystać z addEventListener

1
komentarz 26 lutego 2018 przez pablop76 VIP (123,120 p.)

@gremlin,
Ten kod działa tylko jeżeli sam nie zaznaczysz jakiegoś checkboxa.

1
komentarz 26 lutego 2018 przez gremlin Dyskutant (7,600 p.)
Faktycznie, pisałem to późno na szybko. Niepotrzebnie używając setAttribute, już poprawione.
+1 głos
odpowiedź 26 lutego 2018 przez pablop76 VIP (123,120 p.)

Może takie rozwiązanie ?

komentarz 26 lutego 2018 przez hiper007 Stary wyjadacz (11,270 p.)
Dzieki :) a daloby sie tak. zrobic, ze kazdy przycisk mial swojego onClicka. Naciskam na zaznacz wykonuje sie funkcja odpowiedzialna za zaznaczenie. Naciskam na klawisz odznacz i wykonuje sie funkcja odpowiedzialna za odznaczenia. Kazdy button bedzie mial w sobie onclicka kierujacego do odpowiedniej funkcji. Reszta jest super oto wlasnie chodzi :)
komentarz 27 lutego 2018 przez pablop76 VIP (123,120 p.)

Oczywiście. Zapoznaj się tak jak napisał xmentor z addEventListener

Podobne pytania

+1 głos
1 odpowiedź 287 wizyt
0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 21 grudnia 2019 w PHP przez milogab2004 Początkujący (440 p.)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 12 lipca 2016 w JavaScript przez patryk23 Początkujący (290 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...