484 Stimmen

Wie entfernt man das Attribut "deaktiviert" mit jQuery?

Ich muss die Eingaben zunächst deaktivieren und sie dann durch Anklicken eines Links aktivieren.

Das habe ich bis jetzt versucht, aber es funktioniert nicht.

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

jQuery:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').removeAttr("disabled")
});

Das zeigt mir true und dann false aber an den Eingaben ändert sich nichts:

$("#edit").click(function(event){
   alert('');
   event.preventDefault();
   alert($('.inputDisabled').attr('disabled'));
   $('.inputDisabled').removeAttr("disabled");
   alert($('.inputDisabled').attr('disabled'));
});

2 Stimmen

Ich verstehe Ihr Problem nicht. Was wollen Sie wissen?

0 Stimmen

Was ist also die Frage? Ich meine, welches Problem Sie haben.

9 Stimmen

Prop() verwenden - .prop('disabled', false)

975voto

dsgriffin Punkte 64890

Immer verwenden Sie die prop() Methode, um Elemente bei der Verwendung von jQuery zu aktivieren oder zu deaktivieren (siehe unten, warum).

In Ihrem Fall wäre dies der Fall:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});

jsFiddle Beispiel hier.


Warum verwenden prop() wenn Sie Folgendes verwenden könnten attr() / removeAttr() um dies zu tun?

Im Grunde genommen, prop() sollte beim Abrufen oder Setzen von Eigenschaften (wie zum Beispiel autoplay , checked , disabled y required u.a.).

Während das, was Sie tun wollen kann technisch mit Hilfe von attr() / removeAttr() heißt das noch lange nicht, dass es auch so ist. sollte durchgeführt werden - und kann, wie in diesem Fall, seltsames/problematisches Verhalten verursachen.

"Der Unterschied zwischen Attributen und Eigenschaften kann in bestimmten bestimmten Situationen wichtig sein. Vor jQuery 1.6 war die .attr() Methode manchmal bei der Abfrage einiger Attribute die Eigenschaftswerte berücksichtigt, was zu inkonsistentem Verhalten führen konnte. Ab jQuery 1.6 wird die .prop() Methode bietet eine Möglichkeit, Eigenschaftswerte explizit abzurufen, während .attr() ruft Attribute ab."

"Eigenschaften beeinflussen im Allgemeinen den dynamischen Zustand eines DOM-Elements, ohne ohne das serialisierte HTML-Attribut zu verändern. Beispiele hierfür sind die value Eigenschaft von Eingabeelementen, die disabled Eigenschaft der Eingänge und Tasten, oder die checked Eigenschaft eines Kontrollkästchens. Die .prop() Methode sollte verwendet werden, um die disabled y checked anstelle der .attr() Methode. Die Website .val() Methode sollte für das Abrufen und Setzen von value ." - jQuery-Dokumentation für prop()

Vor JQuery 3.0 (vor 2016)

Der Grund, warum Sie Folgendes verwenden sollten prop über removeAttr() ist das removeAttr() beseitigt vollständig die disabled Attribut selbst - denn diese Methode würde den entsprechenden Eigenschaftsnamen einfach auf false :

Vor jQuery 3.0 wurde die Funktion .removeAttr() für ein boolesches Attribut wie wie checked, selected oder readonly würde auch das entsprechende benannte Eigenschaft auf false gesetzt. Dieses Verhalten war erforderlich für alte Versionen des Internet Explorers erforderlich, ist aber bei modernen Browsern nicht korrekt weil das Attribut den Anfangswert darstellt und die Eigenschaft den aktuellen (dynamischen) Wert repräsentiert. - jQuery 3.0 Wesentliche Änderungen

Während prop() setzt lediglich den zugrunde liegenden booleschen Wert der Eigenschaft auf false.

1 Stimmen

Nur eine kleine Ergänzung, wenn Sie das Kontrollkästchen deaktivieren oder die Markierung aufheben möchten. Wir müssen zuerst die Markierung aufheben und dann wie folgt deaktivieren jQuery('#no_tax_payer').prop("checked", false).prop("disabled", true); Hoffentlich hilft das jemandem!

35 Stimmen

Hmm, .prop("disabled", false) scheint bei mir in einer Schaltfläche nicht zu funktionieren - lässt das Attribut "disabled" im Tag ohne Wert.

5 Stimmen

@UpTheCreek hat auch bei mir nicht funktioniert. Aber ich habe festgestellt, dass es sich um ein Problem mit der "this"-Klausel handelt (wie üblich). In dem speziellen Fall .prop() wurde auf dem Element ausgeführt, das durch this ( this.prop("disabled", false) aber da es sich um einen Rückruf handelte, wurde es an das falsche Element gebunden, also musste ich die übliche var that = this Abhilfe. Versuchen Sie zu spielen mit .apply() / .call() hat nicht gut funktioniert; ich weiß nicht, warum. Überprüfen Sie mit einem console.log(this) wenn es auf das gewünschte Objekt eingestellt ist, kurz vor dem Aufruf von this.prop(...)

75voto

Umesh Patil Punkte 4080

Um die Verwendung deaktivierter Attribute zu entfernen,

 $("#elementID").removeAttr('disabled');

und die Verwendung des Attributs "deaktiviert" hinzuzufügen,

$("#elementID").prop("disabled", true);

お楽しみに :)

45voto

Muthu Kumaran Punkte 17389
<input type="text" disabled="disabled" class="inputDisabled" value="">
<button id="edit">Edit</button>

$("#edit").click(function(event){
    event.preventDefault();
    $('.inputDisabled').removeAttr("disabled")
});

http://jsfiddle.net/ZwHfY/

17voto

Dhamu Punkte 1654

So verwenden,

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

<div id="edit">edit</div>

JS:

 $('#edit').click(function(){ // click to
            $('.inputDisabled').attr('disabled',false); // removing disabled in this class
 });

6 Stimmen

Diese funktioniert bei mir tatsächlich. Das prop('disabled', false) hat überraschenderweise nicht funktioniert.

0 Stimmen

@Stefan das Gleiche hier! Haben Sie herausgefunden, warum?

1 Stimmen

Ich weiß, dass dies ein alter Thread ist, aber wenn jemand noch mit diesem Problem kämpft, war mein Problem, dass das Element ein <a> an dem .prop('disabled', false) funktioniert nicht. Ich habe es geändert in eine <button> und es funktioniert jetzt

9voto

nicosantangelo Punkte 12736

Ich glaube, Sie versuchen, die umzuschalten. den deaktivierten Zustand, in diesem Fall sollten Sie dies verwenden (von 本問 ):

$(".inputDisabled").prop('disabled', function (_, val) { return ! val; });

Hier ist eine funktionierende Fiedel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X