2013-02-26 15 views
8

Nie mogę wymyślić tego. Zgodnie z W3 Schools, sprawdzana właściwość ustawia lub zwraca zaznaczony stan pola wyboru.JS .checked vs jquery attr ("sprawdzone"), jaka jest różnica?

Dlaczego więc $('input').checked ? $('div').slideDown() : $('div').slideUp(); nie działa?

Korzystanie z podpory jednak działa.

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp();

To jest dla wyboru, które jest sprawdzane na podstawie wartości bazy danych.

+0

Ones jQuery drugiej nie –

+0

jest Wymień .attr() z .prop(), ponieważ .prop() jest szybsza – frosdqy

+0

zaktualizowana prop –

Odpowiedz

11

checked to własność elementu DOM, więc użyj jej na elementach DOM zamiast obiektów jQuery.

$('input')[0].checked 

jeśli masz obiektu jQuery, użyj prop zamiast attr ponieważ jesteś sprawdzając właściwość. Tylko jako punkt odniesienia:

$("<input type='checkbox' checked='checked'>").attr("checked") // "checked" 
$("<input type='checkbox' checked='foo'>").attr("checked") // "checked" 
$("<input type='checkbox' checked>").attr("checked") // "checked" 
$("<input type='checkbox'>").attr("checked") // undefined 

Zważywszy [0].getAttribute("checked") powróci rzeczywistą wartość.

prop powróci true lub false na podstawie tego, czy w ogóle istnieje atrybut

+0

Jeśli chciał rzeczywiście sprawdzić atrybut, należy użyć 'attr' lub' $ ('input') [0] .getAttribute ("sprawdzone") '? – RobG

+1

@RobG Ja osobiście zwykle używam surowego DOM nad jQuery, ale to zależy od sytuacji. "Sprawdzane" jest złym przykładem, ponieważ wartość nie ma znaczenia - jest to atrybut boolowski. – Dennis

+0

@RobG: jQuery robi pewne rzeczy na atrybuty boolowskie, więc musiałbyś użyć 'getAttribute', jeśli chcesz uzyskać prawdziwą wartość. – Blender

4

checked jest właściwością obiektu DOM, a nie obiektu jQuery. Aby to działało, trzeba uzyskać obiekt DOM:

$('input')[0].checked; 

Można również zrobić .is(':checked').

0

$ („input”) zwraca obiekt jQuery i nie zostały sprawdzone nieruchomości. Możesz użyć polecenia $ ('input') [0] .checked.

0

$('input').attr('checked') jest przestarzała i należy stosować $('input').prop('checked')
Ponadto $('input').checked nie będzie działać jako $('input') jest obiektem jQuery i checked jest własnością tak dlatego jQuery ma pochodzić z $('input').prop('checked') dostępu do właściwości.

jednak przekonwertować obiekt jQuery DOM obiekt trzeba zrobić
$('input')[0].checked ten staje się obiektem DOM, a następnie można uzyskać dostęp do nieruchomości bezpośrednio z .

Ale z jQuery dostępu do właściwości należy użyć tego:

$('input').prop('checked') ? $('div').slideDown() : $('div').slideUp(); 

Mam nadzieję, że to pomoże!

4

W tym przypadku trzeba prop() zamiast attr(), zastępujące połączenia do attr() z prop() w kodzie generalnie będzie działał.

Odhttp://blog.jquery.com/2011/05/10/jquery-1-6-1-rc-1-released/

Różnica między atrybutów i właściwości mogą być ważne w określonych sytuacjach. Przed jQuery 1.6, metoda .attr() czasami uwzględniała wartości właściwości podczas pobierania niektórych atrybutów, co może powodować niespójne zachowanie. Od jQuery 1.6, metoda .prop() zapewnia sposób jawnego pobierania wartości właściwości, podczas gdy .attr() pobiera atrybuty.

elem.checked ==== true (Boolean) ulegnie zmianie wraz stanie checkbox

$(elem).prop("checked") ==== true (Boolean) ulegnie zmianie wraz stanie checkbox

elem.getAttribute("checked") ===== "checked" (String) Stan początkowy z wyboru; nie zmienia

$(elem).attr("checked") (1.6) ===== "checked" (String) Początkowy stan pola wyboru; nie zmienia

$(elem).attr("checked") (1.6.1+) ======== "checked" (String) ulegnie zmianie wraz stanie checkbox

$(elem).attr("checked") (pre-1.6) ======= true (Boolean) Zmieniono ze stanu checkbox

Również ten url pomoże więcej o zapytaniach .prop() vs .attr()

różnica /is-checked-vs-attr-checked-checked/7 na http://jsperf.com/is-checked-vs-attr-checked-checked/7

także zrozumieć The elements atttribute and properties odnoszą http://christierney.com/2011/05/06/understanding-jquery-1-6s-dom-attribute-and-properties/ http://jsperf.com/is-checked-vs-attr-checked-checked/7

Powiązane problemy