Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQuery] Checkbox reaguje tylko dla pierwszego attr
Forum PHP.pl > Forum > Po stronie przeglądarki
KotWButach
No i mi głupio ale muszę was prosić o jeszcze jedną podpowiedź.

Mam taki kod. Jednak checkbox działa tylko za pierwszym zaznaczeniem i odznaczeniem potem już niestety nie reaguje sad.gif

  1. $(".edit li:nth-child(1)").click(function() {
  2. $('input[type=checkbox]').attr('checked', false); // zmiana
  3. alert();
  4. $('input[type=checkbox]').attr('checked', true); // zmiana
  5. alert();
  6. $('input[type=checkbox]').attr('checked', false); // nie zmienia stanu
  7. alert();
  8. $('input[type=checkbox]').attr('checked', true); // nie zmienia stanu
  9. alert();
  10.  
  11. return false;
  12. });
nospor
Do zaznaczenia powinienes uzyc
$('input[type=checkbox]').attr('checked', 'checked');

zas do odznaczenia
removeAttr('checked')
KotWButach
Niestety w dalszym ciągu reaguje tylko na pierwsze dwa sad.gif

  1. $(".edit li:nth-child(1)").click(function() {
  2. $('input[type=checkbox]').attr('checked', 'checked'); // zmiana
  3. alert();
  4. $('input[type=checkbox]').removeAttr('checked'); // zmiana
  5. alert();
  6. $('input[type=checkbox]').attr('checked', 'checked'); // nie zmienia stanu
  7. alert();
  8. $('input[type=checkbox]').removeAttr('checked'); // nie zmienia stanu
  9. alert();
  10.  
  11. return false;
  12. });
trueblue
Albo:
  1. element.prop('checked', true/false);


A tu:
  1. $('input[type="checkbox"]')

nospor
To jest dokladny kod jaki masz? Z tymi pustymi alert() pomiedzy?
KotWButach
alerty powstawiałem tylko po to by widzieć czy coś się zmienia nie muszę dzięki temu klikać co chwila. Taka testowa funkcja.

Pomogło
  1. $('input[type="checkbox"]').prop('checked', true/false);


Dziękuje wszystkim za pomoc.

Jednak wciąż nie rozumiem dlaczego poprzednie wersje nie działały szkoda sad.gif.
by_ikar
Bo jquery attr działa trochę "magicznie" do wersji 1.6. I jak masz powiedzmy textarea w którym masz atrybut value:

  1. <textarea value="test"></textarea>


To jak użyłeś takiego kodu jquery:

Kod
console.log($('textarea ').attr('value'))


to do wersji 1.6 w konsoli mogłeś zobaczyć pusty string, ponieważ jqury pobierało wartość tą, która znajdowała się pomiędzy textarea, zamiast pobierać wartość z atrybutu. A całość ma swoje podłoże w różnicy między właściwościami znacznika, a jego atrybutami. Tak przykładowo:

  1. <input type="checkbox" checked>
  2. <input type="checkbox" checked="checked">


oba checkboxy będą zaznaczone, bo checkbox z samym checked jest właściwością znacznika, i nie pobierzesz jego wartości poprzez attr, z kolei checkbox z wartością jest już atrybutem. No wprowadzało (i nadal wprowadza, bo wielu ludzi korzysta z starej wersji jquery) wiele zamieszania i tworzyło niepotrzebną magię..
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.