Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Hej. Chciałbym aby po wybraniu głównego korzenia drzewa zaznaczały się automatycznie wszystkie dzieci.
Jak coś takiego zrobić za pomocą jquery?

Obrazek

Korzeń ma id="1" dzieci zaś id="1-1" itd.
Byłbym bardzo wdzięczny za wskazanie mi dobrej drogi do rozwiązania :)Adam Trojańczyk edytował(a) ten post dnia 17.12.09 o godzinie 01:26
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Zaznaczanie dzieci w liście.


jQuery('#1').find('input[type=checkbox]').each(function() { this.checked = true; });


Daje radę?:)
Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Przemek Szalko:

jQuery('#1').find('input[type=checkbox]').each(function() { this.checked = true; });


Daje radę?:)
Nie bangla :(
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Zaznaczanie dzieci w liście.

Problem może być z tym że to ID które podałeś jest to ID pola typu input. Jakbym znał dokładną strukturę HTML, albo elementu nadrzędnego (pewnie <LI>) który przechowuje inputa i listę dzieci, to zadziała.

Generalnie wstaw sobie za #1 to co trzyma strukturę inputów i ma śmigać

edit: "strukturę inputów" - oczywiście mam na myśli strukturę inputów na poziomie od którego chcesz zaznaczaćPrzemek Szalko edytował(a) ten post dnia 17.12.09 o godzinie 01:41
Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Przemek Szalko:
Problem może być z tym że to ID które podałeś jest to ID pola typu input. Jakbym znał dokładną strukturę HTML, albo elementu nadrzędnego (pewnie <LI>) który przechowuje inputa i listę dzieci, to zadziała.

Generalnie wstaw sobie za #1 to co trzyma strukturę inputów i ma śmigać

edit: "strukturę inputów" - oczywiście mam na myśli strukturę inputów na poziomie od którego chcesz zaznaczać


Ok zakapowałem zaczyna robić tak jak chcę :)
Dzięki!Adam Trojańczyk edytował(a) ten post dnia 17.12.09 o godzinie 02:23
Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Przemek Szalko:
Problem może być z tym że to ID które podałeś jest to ID pola typu input. Jakbym znał dokładną strukturę HTML, albo elementu nadrzędnego (pewnie <LI>) który przechowuje inputa i listę dzieci, to zadziała.

Generalnie wstaw sobie za #1 to co trzyma strukturę inputów i ma śmigać

edit: "strukturę inputów" - oczywiście mam na myśli strukturę inputów na poziomie od którego chcesz zaznaczaćPrzemek Szalko edytował(a) ten post dnia 17.12.09 o godzinie 01:41


$j(".checkbox_tree").click(function() {
if($j(this).attr('checked', false)) {
$j('li.'+this.id).find('input[type=checkbox]').each(function() { this.checked = true; });
}
else if($j(this).attr('checked', true)) {
$j('li.'+this.id).find('input[type=checkbox]').each(function() { this.checked = false; });
}
});


Zrobiłem coś takiego.
Zaznaczanie działa, ale odznaczać się nie chce... Czy mam gdzieś błąd?
Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Przemek Szalko:
Problem może być z tym że to ID które podałeś jest to ID pola typu input. Jakbym znał dokładną strukturę HTML, albo elementu nadrzędnego (pewnie <LI>) który przechowuje inputa i listę dzieci, to zadziała.

Generalnie wstaw sobie za #1 to co trzyma strukturę inputów i ma śmigać

edit: "strukturę inputów" - oczywiście mam na myśli strukturę inputów na poziomie od którego chcesz zaznaczaćPrzemek Szalko edytował(a) ten post dnia 17.12.09 o godzinie 01:41

A mozę jakoś inaczej się odznacza checboxy? Bo w sumie pod firebugiem jak je wszystkie zaznacze nei widzę żarnych zmian..
Marcin Witek

Marcin Witek isido.pl ułatwia
pracę - polski sytem
zarządzania
projekt...

Temat: Zaznaczanie dzieci w liście.


if($j(this).attr('checked', false))


to zawsze będzie prawdziwe, bo tutaj ustawiasz objekt this na "false" (czy dalej, true) i dostajesz obiekt jQuery, który nie jest ani false, ani undefined, ani NaN, czyli warunek jest spełniony

żeby sprawdzić musi być


if($j(this).attr('checked')==false) {

$j('li.'+this.id).find('input[type=checkbox]').each(function() { this.checked = true; });

}

else if($j(this).attr('checked')==true) {

$j('li.'+this.id).find('input[type=checkbox]').each(function() { this.checked = false; });

}


:)Marcin Witek edytował(a) ten post dnia 17.12.09 o godzinie 14:07
Tobiasz Glazar

Tobiasz Glazar Front-End Developer

Temat: Zaznaczanie dzieci w liście.

A nie prościej tak?

var parentChecked = $j(this).attr('checked');
$j('li.'+this.id +' input[type=checkbox]').each(function() {
this.checked = !parentChecked;
});
Tobiasz Glazar edytował(a) ten post dnia 17.12.09 o godzinie 14:26
Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Marcin Witek:

if($j(this).attr('checked', false))


to zawsze będzie prawdziwe, bo tutaj ustawiasz objekt this na "false" (czy dalej, true) i dostajesz obiekt jQuery, który nie jest ani false, ani undefined, ani NaN, czyli warunek jest spełniony

żeby sprawdzić musi być


if($j(this).attr('checked')==false) {

$j('li.'+this.id).find('input[type=checkbox]').each(function() { this.checked = true; });

}

else if($j(this).attr('checked')==true) {

$j('li.'+this.id).find('input[type=checkbox]').each(function() { this.checked = false; });

}


:)Marcin Witek edytował(a) ten post dnia 17.12.09 o godzinie 14:07

Dziękuję Ci! Faktycznie nie zwóciłem na to uwagi.
Ukłony!
Adam T.

Adam T. CEO w Czarny Kod
Software House i
CTO/Założyciel w Tap
To...

Temat: Zaznaczanie dzieci w liście.

Tobiasz Glazar:
A nie prościej tak?

var parentChecked = $j(this).attr('checked');
$j('li.'+this.id +' input[type=checkbox]').each(function() {
this.checked = !parentChecked;
});
Tobiasz Glazar edytował(a) ten post dnia 17.12.09 o godzinie 14:26

Aż sprawdzę :)
Dzięki ;)
Bartek Stańkowski

Bartek Stańkowski front-end & mobile
web developer

Temat: Zaznaczanie dzieci w liście.

Zamiast

$('#1').find('input[type=checkbox]')

prościej

$('#1 :checkbox')

jQuery ma swoje selektory dla różnych pól formularzy, np. :checkbox, :text, :checked itp.

konto usunięte

Temat: Zaznaczanie dzieci w liście.

Bartek Stańkowski:
$('#1 :checkbox')

Na wszelki wypadek sugeruję

$('#1 input:checkbox')


W zależności od przeglądarki pierwsza metoda nie zawsze daje pożądane rezultaty, lepiej jest najpierw zawęzić wybór do elementów typu input, a potem podać jeszcze typ (korzystając z selektora).
Bartek Stańkowski

Bartek Stańkowski front-end & mobile
web developer

Temat: Zaznaczanie dzieci w liście.

Paweł K.:
Bartek Stańkowski:
$('#1 :checkbox')

Na wszelki wypadek sugeruję

$('#1 input:checkbox')


W zależności od przeglądarki pierwsza metoda nie zawsze daje pożądane rezultaty, lepiej jest najpierw zawęzić wybór do elementów typu input, a potem podać jeszcze typ (korzystając z selektora).


Hmm pierwsze słyszę i szczerze wątpię, żeby ten selektor mógł nie działać. Nigdy się z taką sytuacją nie spotkałem, a używałem wielokrotnie.
W jakich okolicznościach :checkbox nie działa?

W dokumentacji radzą korzystać z input:checkbox, ale ze względu na wydajność.

konto usunięte

Temat: Zaznaczanie dzieci w liście.

Ja się spotakałem. Zajęło to trochę czasu zanim doszedłem dlaczego selektor mi nie działa. :) Inaczej działał Firefox, a inaczej IE. Bardzo możliwe, że wpływ na to miał konkretny markup - wiadomo, na jednej stronie mogą być problemy, na innej nie. Teraz już nie pamiętam szczegółów, ale na wszelki wypadek o tym wspominam, może zaoszczędzę czasu innym.

Następna dyskusja:

Edytor / kreator stron dla ...




Wyślij zaproszenie do