Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][JavaScript]Operacja skryptu na checkbox-ach o różnych atrybutach "name".
Forum PHP.pl > Forum > Przedszkole
Szunaj85
Mam tu skrypt, który pozwala zaznaczyć tylko 1 checkbox spośród kilku.
  1. <input type="checkbox" name="ballet" />
  2. <input type="checkbox" name="ballet" />
  3. <input type="checkbox" name="ballet" />

  1. $(':checkbox').on('change',function(){
  2. var th = $(this), name = th.prop('name');
  3. if(th.is(':checked')){
  4. $(':checkbox[name="' + name + '"]').not($(this)).prop('checked',false);
  5. }
  6. });
Problem w tym, że aby prawidłowo działać wszystkie checkbox-y muszą mieć taki sam atrybut "name", przynajmniej w tej postaci skryptu.
Czy da się coś zrobić, aby każdy atrybut "name" miał inną końcówkę np. w grupie 1: _1 _2 _3 a w grupie drugiej: _4 _5 _6, a jednocześnie żeby skrypt działał prawidłowo?
  1. <input type="checkbox" name="ballet_1" />
  2. <input type="checkbox" name="ballet_2" />
  3. <input type="checkbox" name="ballet_3" />
markonix
Oprzyj to o coś innego, jakiś własny znacznik, klasę.
vermis
Jeśli ma być tylko jeden to pownno to być radio a nie checkbox.
Jeśli się upierasz to możesz skorzystać z atrybutu data-* np. data-myname='alamakota'
Szunaj85
Cytat(vermis @ 12.12.2013, 16:00:39 ) *
możesz skorzystać z atrybutu data-* np. data-myname='alamakota'

Myślę, że tutaj najlepszym rozwiązaniem będzie dodanie nowego, dodatkowego atrybutu.
Jednak mimo wielu prób nie mogę poradzić sobie z kodem javascript.
Co powiniennem w nim zmienić aby działał prawidłowo?


markonix
Z klasą byłoby prościej ale jeżeli własny atrybut to proponuje data-group.

Pokaż próbę (wrzuć na jsfiddle).
Szunaj85
  1. $(':checkbox').on('change',function(){
  2. var th = $(this), data-myname = th.prop('data-myname');
  3. if(th.is(':checked')){
  4. $(':checkbox[data-myname="' + data-myname + '"]').not($(this)).prop('checked',false);
  5. }
  6. });
No ja mniejwięcej tak to zmieniłem... A swoją drogą czy ma jakieś znaczenie czy atrybut będzie się nazywał data-myname czy data-group czy jeszcze jakoś inaczej?
markonix
Ma znaczenie, może nie funkcyjne ale logiczne, dla Ciebie w przyszłości i innych osób, które będą pracowały przy tym skrypcie.
Jest ok tylko zmień nazwę na logiczniejszą zgodnie z powyższym. Nazwa zmiennej do której przypisujesz grupę klikniętego ma już mniejsze znaczenie. Nazwałbym po prostu group, bez myślników.
Zmień też w 2 linijce prop na attr.
Szunaj85
Starałem zastosować się do Twoich wskazówek, ale skrypt dalej nie działa. Już nie wiem co mogę jeszcze zrobić.
Bardzo proszę o pomoc!
Cytat
Zmień też w 2 linijce prop na attr
A czy w 4 linijce nie powiniennem zrobić tego samego? (próbowałem, ale też bez skutku)
Obecnie wygląda to tak:

  1. $(':checkbox').on('change',function(){
  2. var th = $(this), data-group = th.attr('data-group');
  3. if(th.is(':checked')){
  4. $(':checkbox[data-group="' + data-group + '"]').not($(this)).prop('checked',false);
  5. }
  6. });

  1. <input type="checkbox" name="ballet_1" data-group="ballet"/>
  2. <input type="checkbox" name="ballet_2" data-group="ballet"/>
  3. <input type="checkbox" name="ballet_3" data-group="ballet"/>
phpion
Nazwa zmiennej z myślnikiem? Zapewne JS traktuje to jako odejmowanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.