Autor | Zpráva | ||
---|---|---|---|
Orsajo Profil * |
#1 · Zasláno: 12. 1. 2014, 12:42:42
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 |
#4 · Zasláno: 12. 1. 2014, 15:44:36
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 |
#5 · Zasláno: 12. 1. 2014, 15:59:46
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 |
#6 · Zasláno: 12. 1. 2014, 16:03:49
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í. |
||
Časová prodleva: 10 let
|
0