Warum verwenden prop() wann du es gebrauchen könntest attr()/removeAttr() um dies zu tun?
Grundsätzlich, prop() sollte beim Holen oder Setzen verwendet werden Eigenschaften (wie zum Beispiel autoplay, checked, disabled und required unter anderem).
Durch die Nutzung removeAttr(), entfernen Sie vollständig die disabled Attribut selbst – während prop() setzt lediglich den zugrunde liegenden booleschen Wert der Eigenschaft auf false.
Während, was Sie tun möchten kann mit gemacht werden attr()/removeAttr(), es bedeutet es nicht sollen getan werden (und kann wie in diesem Fall zu seltsamem/problematischem Verhalten führen).
“Der Unterschied zwischen Attributen und Eigenschaften kann in bestimmten Situationen wichtig sein. Vor jQuery 1.6 war die .attr() -Methode hat beim Abrufen einiger Attribute manchmal Eigenschaftswerte berücksichtigt, was zu inkonsistentem Verhalten führen konnte. Ab jQuery 1.6 ist die .prop()
-Methode bietet eine Möglichkeit, Eigenschaftswerte explizit abzurufen, während .attr() ruft Attribute ab.”
“Eigenschaften wirken sich im Allgemeinen auf den dynamischen Zustand eines DOM-Elements aus, ohne das serialisierte HTML-Attribut zu ändern. Beispiele hierfür sind die value
Eigenschaft von Eingabeelementen, die disabled Eigenschaft von Eingängen und Schaltflächen, oder die checked Eigenschaft eines Kontrollkästchens. Der .prop() Methode sollte zum Festlegen verwendet werden disabled und checked anstatt des .attr()
Methode. Der .val() Methode sollte zum Abrufen und Einstellen verwendet werden value.”
Die Leute sollten auch über die schmutzige Checkedness-Flagge Bescheid wissen, die vollständig kaputt geht attr vs prop für Kontrollkästchen: w3.org/TR/html5/forms.html#concept-input-checked-dirty mit Ausnahme der internen jQuery-Workaround-Magie.
– Ciro Santilli 新疆再教育营六四事件法轮功郝海东
6. Juli 14 um 11:29 Uhr
Hmm, .prop(“disabled”, false) scheint bei mir in einer Schaltfläche nicht zu funktionieren – lässt das ‘disabled’-Attribut im Tag ohne Wert.
– UpTheCreek
6. Januar 15 um 10:42 Uhr
@UpTheCreek hat bei mir auch nicht funktioniert. Aber ich habe festgestellt, dass es sich (wie üblich) um ein Bereichsproblem mit der ‘this’-Klausel handelt. Im konkreten Fall .prop() wurde auf dem Element ausgeführt, auf das gezeigt wird this (this.prop("disabled", false), aber in einem Rückruf war es an das falsche Element gebunden, also musste ich das Gemeinsame tun var that = this Problemumgehung. Versuchen, mit zu spielen .apply()/.call() funktionierte nicht gut; Ich weiß nicht warum. Überprüfen Sie mit a console.log(this) wenn es auf Ihr gewünschtes Objekt eingestellt ist, kurz vor dem Aufruf this.prop(...)
– Kamafeder
22. Januar 15 um 13:35 Uhr
Ich nominiere diese Antwort als Kandidat für die Umstellung auf den Dokumententeil. Übersichtlich, vollständig, gut geschrieben.
– Anne Gunn
6. September 16 um 17:35 Uhr
Durch die Verwendung von removeAttr() entfernen Sie das deaktivierte Attribut selbst vollständig – während prop() lediglich den zugrunde liegenden booleschen Wert der Eigenschaft auf “false” setzt. Ich glaube nicht, dass das stimmt. In HTML ist das bloße Vorhandensein des disabled Die Eigenschaft deaktiviert das Element. Zum Beispiel mit einem <button disabled="false"></button> die Schaltfläche nicht aktivieren, muss die Eigenschaft entfernt werden. Durch Anruf $('button').prop('disabled', false); jQuery entfernt die Eigenschaft für Sie, wie ich in beobachtet habe dieser Codestift (Inspizieren Sie die Entfernung des Eigentums).
– Naftali
7. März 19 um 14:25 Uhr
um die Verwendung von deaktivierten Attributen zu entfernen,
$("#elementID").removeAttr('disabled');
und um die Verwendung von deaktivierten Attributen hinzuzufügen,
Ich sehe dein Problem nicht. Was fragst du?
– Nikosantangelo
29. November 12 um 13:09 Uhr
Was ist also die Frage? Ich meine, welches Problem Sie haben
– Satya Teja
29. November 12 um 13:09 Uhr
Verwenden Sie prop() – .prop(‘deaktiviert’, falsch)
– Jay Blanchard
29. November 12 um 13:10 Uhr
Wenn Ihr Problem gelöst ist, kreuzen Sie bitte die akzeptierte (echte) Antwort an, damit andere es wissen …
– Dhamu
29. November 12 um 13:51 Uhr
Das Problem ist, dass es nach dem Klick nicht deaktiviert wird
– fatiDev
29. November 12 um 16:18 Uhr