Autor Zpráva
Orsajo
Profil *
Dobrý den,

můžete mi prosím poradit. Našel jsem si tento jquery script, který dovolí zašrtnout jen jeden checkbox a potřebuji, aby fungoval na více <dd>. Když mám vytvořené 2 <dd> a v nich checkboxy, tak mi to dovolí zaškrtnout jen jeden checkbox v obou <dd> a já chci, aby se vždy mohl zatrhnout jen jeden checkbox v jednom <dd>. Na stránce těch <dd> bude více.

Když si vytvořím třídu pro <dd> a uvedu ji v jquery scriptu, tak to funguje, ale musel bych hodněkrát kopírovat tento jquery script a vytvářet hodně tříd a to nechci.

Lze to nějak upravit, aby to fungovalo pro všechny <dd> na stránce?

Díky moc.

HTML kód:
<dl>
  <dt>
    <label>Byl jste spokojen(a) s nákupem?<span>*</span></label>
  </dt>
  <dd>
    <input type="checkbox" name="checkbox1" value="ano" /><label>Ano</label>
    <input type="checkbox" name="checkbox1" value="ne" /><label>Ne</label>
  </dd>
</dl>
<dl>
  <dt>
    <label>Nějaká další otázka?<span>*</span></label>
  </dt>
  <dd>
    <input type="checkbox" name="checkbox2" value="ano" /><label>Ano</label>
    <input type="checkbox" name="checkbox2" value="ne" /><label>Ne</label>
  </dd>
</dl>


Jquery kód:
$('dd :checkbox').on('change',function(){
  var th = $(this), name = th.prop('name'); 
  if(th.is(':checked')){
    $(':checkbox[name="'  + name + '"]').not($(this)).prop('checked',false);   
  }
});
Kubo2
Profil
Orsajo:
Nepoznám síce veľmi jQuery, ale dám ti jednu radu: použi radio buttony (prepínače). To, čo sa snažíš dosiahnuť, je primárne chovanie prepínačov, zaškrtávatká (checkboxy) sú k niečomu inému.
quatzael
Profil
Orsajo:

Myslím, že stačí změnit selektor na 4. řádku a mělo by to fungovat:

$(this).closest('dd').find(':checkbox[name="'  + name + '"]').not($(this)).prop('checked',false);

Snad tam nemám chybu..


Orsajo:
Nebo v Tvým případě by snad i stačilo:
$(this).closest('dd').find('input').not($(this)).prop('checked',false);
Chamurappi
Profil
Reaguji na Orsaja:
Podobně jako Kubovi2 mi zůstává rozum stát nad tím, proč nepoužíváš <input type="radio">. Cílem je udělat formulář méně použitelný?
Proč nejsou <label>y svázané s <input>y (buď pomocí id a for, nebo zanořením <input>u dovnitř <label>u), aby na ně šlo také klikat?
Proč je na obalení každé otázky použitý nový definiční seznam?

tak mi to dovolí zaškrtnout jen jeden checkbox v obou <dd> a já chci, aby se vždy mohl zatrhnout jen jeden checkbox v jednom <dd>
Nevím, zda jsem otázku správně pochopil, ale tebou uvedený skript na uvedeném HTML funguje tak, jak chceš — vzájemně exkluzivní jsou zaškrtávátka se stejným name.
quatzael
Profil
Chamurappi:
Asi tam měl omylem všude name stejný, takže mu to nefungovalo..

A někdy jsou pro tenhle účel lepší checkboxy než radia, protože u nich jde zaškrtnutí zase zrušit. To se u některých formulářů nebo filtrů hodí.
Chamurappi
Profil
Reaguji na quatzaela:
Nejsou. Pokud existují tři možnosti, mají tam být tři přepínače, ne dvě zaškrtávátka s nepředvídatelnou funkcí.

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: