Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][JavaScript]Operacja skryptu na checkbox-ach o różnych atrybutach "name".
Szunaj85
post
Post #1





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


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" />


Ten post edytował Szunaj85 12.12.2013, 15:57:16
Go to the top of the page
+Quote Post
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Oprzyj to o coś innego, jakiś własny znacznik, klasę.
Go to the top of the page
+Quote Post
vermis
post
Post #3





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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'
Go to the top of the page
+Quote Post
Szunaj85
post
Post #4





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


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?


Go to the top of the page
+Quote Post
markonix
post
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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

Pokaż próbę (wrzuć na jsfiddle).

Ten post edytował markonix 12.12.2013, 17:10:23
Go to the top of the page
+Quote Post
Szunaj85
post
Post #6





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


  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?
Go to the top of the page
+Quote Post
markonix
post
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Szunaj85
post
Post #8





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


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"/>


Ten post edytował Szunaj85 13.12.2013, 11:50:16
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nazwa zmiennej z myślnikiem? Zapewne JS traktuje to jako odejmowanie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 19:16