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

Sprawdzenie checkboxów (checked) dla więcej niż jednego pytania (ANKIETA)

VPS Starter Arubacloud
0 głosów
223 wizyt
pytanie zadane 17 sierpnia 2017 w JavaScript przez Adiks Nowicjusz (240 p.)

Jesteście w stanie podpowiedzieć dlaczego się tak dzieje, że gdy sprawdzam zaznaczenie checkboxów o takim samym id, będących wewnątrz tego samego div'a, to gdy mam tylko jednego checkboxa jest wszystko ok, natomiast gdy dołożę kolejne checkboxy, to nie działa (nie wyświetla alertu)?  

https://codepen.io/anon/pen/KvZowy

 

<form name="a" method="post" action="zapisz.html">
 
<div class="6"> <!-- pytanie nr 6 -->
    <h1>6. Co lubisz jeść?</h1>                 
    <input type="checkbox" id="checkagree" value="1"/>Schabowy<br/>
    <input type="checkbox" id="checkagree" value="2"/>Kebab<br/>
    <input type="checkbox" id="checkagree" value="3"/>Frytki
</div>
<input type="submit" value="Submit" onclick="sprawdz();" />
</form>

function sprawdz(){
 
if(a.checkagree.checked == false)
{
    alert('Wybierz co najmniej 1, maksymalnie 2 dania!');
    return false;
}
return true;
}

 

komentarz 17 sierpnia 2017 przez ScriptyChris Mędrzec (190,190 p.)
if(a.checkagree.checked == false)

Nie dobieraj się w ten sposób do HTMLa. Wystarczy, że omyłkowo w kodzie w wyższym lub tym samym scope zadeklarujesz zmienną o tej samie nazwie (mam na myśli 'a'), a wtedy Twój if nie zadziała. Pobierz formularz poprzez ID lub inny atrybut jako obiekt DOM i dopiero wtedy sprawdzaj jego składowe.

Kontrolki forma możesz sobie pobrać taką funkcyjką:

function getFormControls( formReference ) {
  const formElements = [...formReference.elements];
  const controls = formElements.filter( ( ctrl ) => {
    return ctrl.getAttribute( 'name' );
  } );
  
  return controls;
}

const form = document.querySelector( '[name="testForm"]' );
const formControls = getFormControls( form );

console.log('formControls: ', formControls);

Całość: https://codepen.io/ChrissP92/pen/EvoMWM

1 odpowiedź

0 głosów
odpowiedź 17 sierpnia 2017 przez Jedras Maniak (54,860 p.)
Atrybut id dla danego elementu musi być unikalny w strukturze danej strony. Dublować możesz klasy. Tutaj zamiast id chyba powinno być "name" jak mniemam.

Podpinanie zdarzeń (zamiast onclick): https://developer.mozilla.org/pl/docs/Web/API/Element/addEventListener

Podobne pytania

0 głosów
1 odpowiedź 615 wizyt
pytanie zadane 29 września 2019 w JavaScript przez MAXIM7 Obywatel (1,990 p.)
0 głosów
0 odpowiedzi 252 wizyt
+1 głos
1 odpowiedź 290 wizyt
pytanie zadane 8 grudnia 2017 w JavaScript przez lastavenger Obywatel (1,060 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,369 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...