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
Reakce na PetraBK:
Místo události click na labelech 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
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á.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0