2012-03-30 2 views
6

ich ein Upgrade von jQuery 1.5.1 - ich habe über die „neue“ Art und Weise zu lesen „prüfen“ Kontrollkästchen (in 1.6) mitWas ist der richtige Weg, um ein Kontrollkästchen in jQuery 1.7 zu deaktivieren?

prop("checked", true); 

Aber was ist die richtige/bevorzugte Art und Weise zu entfernen eine Checkbox?

Beide scheinen diese Methoden

$('#someSelector').removeProp("checked"); 

oder

$('#someSelector').prop("checked", false); 

Gibt es einen Unterschied zwischen diesen Methoden zu arbeiten? Welchen sollte ich verwenden?

Dank

Antwort

12

Nach http://api.jquery.com/removeprop/. RemoveProp sollte nicht verwendet werden, um überprüft zu entfernen. (weil es vollständig entfernt wird und nicht wieder hinzugefügt werden kann)

Die RemoveProp() - Methode entfernt Eigenschaften, die von der PROP() -Methode festgelegt werden.

Bei einigen integrierten Eigenschaften eines DOM-Elements oder Fensterobjekt kann Browser einen Fehler erzeugen, wenn ein Versuch unternommen wird, die Eigenschaft zu entfernen. jQuery weist der Eigenschaft zuerst den Wert undefined zu, und ignoriert alle vom Browser generierten Fehler. Im Allgemeinen ist es nur notwendig, benutzerdefinierte Eigenschaften zu entfernen, die für ein Objekt festgelegt wurden, und nicht integrierte (native) Eigenschaften.

Hinweis: Verwenden Sie diese Methode nicht, um native Eigenschaften wie aktiviert, deaktiviert oder ausgewählt zu entfernen. Dadurch wird die Eigenschaft vollständig entfernt und kann nach dem Entfernen nicht erneut zum Element hinzugefügt werden. Verwenden Sie .prop(), um diese Eigenschaften stattdessen auf false festzulegen.

-1
$('#someSelector').removeAttr('checked'); 

das Attribut checked entfernen und Sie sollten gut zu gehen.

Weitere Informationen über Prop vs vstr hier. Sie erwähnen auch das checked-Attribut und nennen es explizit als Attribut, nicht als Eigenschaft.

http://api.jquery.com/prop/

+0

Das beantwortet nicht die Frage ... warum ist Ihre Antwort besser als '.removeProp (" checked ")'? Und warum ist es besser als die Alternative '.prop (" checked ", false)' oder '.attr (" checked ", false)'? – Sparky

+1

"Attribute" sind eine Teilmenge von "Eigenschaften", daher ist es immer akzeptabel, "prop" anstelle von "attr" zu verwenden, und Sie müssen nie herausfinden, ob eine "Eigenschaft" ein "Attribut" ist. – Sparky

+1

Die jQuery-Dokumentation, auf die Sie sich beziehen, besagt, dass in diesem Fall prop() vorzuziehen ist. "Wenn Sie jQuery 1.6 verwenden, wird der Code if ($ (elem) .attr (" checked ")) das tatsächliche Inhaltsattribut abrufen, das sich nicht ändert, wenn das Kontrollkästchen aktiviert und deaktiviert ist Anfangswert der geprüften Eigenschaft. " – Niko

3

hiya ich meinen Kommentar wird allerdings aus oben zu viel Text in so vollgestopft sei es hier für Klarheit zu schreiben: (Und ich stimme mit @Claudio)

Wenn dies mich nicht weiß, helfen lassen Ich werde meinen Post-Cheers entfernen! :)

so hier aus: http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/

[quote] als 1.6 i rechnen ...

Element Wert etwas anderes, dann ist es Eigentum oder Wert des Attributs. Wenn Sie ein Kontrollkästchen deaktivieren möchten, möchten Sie die checked -Eigenschaft entfernen, also verwenden Sie $ ("# subscribe: checked"). Prop ("checked", false);

[quote]

jQuery 1.6+

Verwenden Sie die neue .prop() Funktion:.

$ ("MyCheckBox ") prop (" geprüft" , wahr);

$ (". MyCheckbox"). Prop ("checked", false);

Setting "checked" for a checkbox with jQuery? hoffe es hilft, du bist richtig Ich rechne! Prost!

11

Um Ihre Frage genauer zu beantworten:

ich immer

$('#someSelector').prop('checked', false); 

über

$('#someSelector').removeProp('checked'); 

weil ein wichtigen Unterschied zwischen Attribute und Eigentum in diesem Fall bevorzugen würde, ist, dass Das Entfernen des Attributs entspricht dem Festlegen der Eigenschaft (is-checked) auf false.

Das Entfernen der "checked" -Eigenschaft eines Kontrollkästchens macht überhaupt keinen Sinn, weil das Kontrollkästchen immer aktiviert oder deaktiviert ist. Wenn Sie daher die Eigenschaft auf false setzen, um das Kontrollkästchen zu deaktivieren, ist dies logisch konsistent. Das Entfernen der Eigenschaft ist nicht möglich.

Verwandte Themen