Autor | Zpráva | ||
---|---|---|---|
PetrBK Profil |
Ahoj,
rád bych omezil formulář tak, aby šel odeslat jen v případě, že jsou zaškrtnuty pouze dvě položky (2 checkboxy). Samotné checboxy mám skryté a uživatel vidí pouze graficky upravené labels (na které kliká). JS se snažím zaznamenávat počet zaškrtnutých položek, ale toto načítání je o jednu položku opožděné a attr "disabled" je z tlačítka odebrán až když kliknu na třetí checkbox. Může mi někdo, prosím, pomoci? Děkuji P. <span class="checkbox"> <input type="checkbox" name="chb_id_isa[]" id="chb_id_isa_1" class="compare_isa" value="1" /> <label for="chb_id_isa_1" class="compare_isa">item 1</label> </span> <span class="checkbox"> <input type="checkbox" name="chb_id_isa[]" id="chb_id_isa_2" class="compare_isa" value="2" /> <label for="chb_id_isa_2" class="compare_isa">item 2</label> </span> <button type="submit" id="submit" disabled>compare</button> $( "label.compare_isa" ).on( "click", function() { if($( "input.compare_isa:checked" ).length == 2) { $("input.compare_isa").not(":checked").prop("disabled",true); $('#submit').prop('disabled', false); } else { $("input.compare_isa").not(":checked").prop('disabled', false); $('#submit').prop('disabled', true); } }); |
||
Firibix Profil |
#2 · Zasláno: 29. 8. 2020, 22:12:06
Reakce na PetraBK:
Místo události click na label ech raději čekej na událost change samotných checkboxů:
$('input[type=checkbox].compare_isa').on('change', function() { if($( "input.compare_isa:checked" ).length == 2) { // … |
||
Serg Profil |
#3 · Zasláno: 29. 8. 2020, 22:12:25
Asi to bude mít něco společného s pořadím, ve kterém se vykonávají eventy, nebo jak to říct..
$('label.compare_isa').click(function(ev) { console.log('clicked on label'); }); $('input.compare_isa').change(function(ev) { console.log('checkbox state changed'); }); Po kliknutí na label se vypsalo do konzole: clicked on label checkbox state changed I po prohození pořadí definování těch funkcí byl výpis do konzole stejný. A po přidání ev.preventDefault(); do funkce při kliknutí na label se pak ani nevypsalo to "checkbox state changed".
Takže podle všeho se nejdřív provede funkce onclick na label a až potom ta výchozí akce, která změní stav checkboxu. Aspoň ve Firefoxu. Jako řešení mě napadá místo toho aby to bylo navázané na kliknutí na label bych to zkusil navázat na onchange na ty checkboxy. |
||
PetrBK Profil |
Firibix & Serg:
Díky moc za radu a vysvětlení. S událostí na samotný checkbox to funguje, tak jak má. |
||
Časová prodleva: 4 roky
|
0