Diese Frage ist 2 Jahre alt, aber sie ist immer noch eine gute Frage und war das erste Google-Ergebnis ... aber alle vorhandenen Antworten empfehlen die Einstellung und entfernen das HTML Attribut (removeAttr("disabled")) "disabled", was nicht der richtige Ansatz ist. Es gibt eine Menge Verwirrung in Bezug auf Attribut vs. Eigenschaft.
HTML
Das "behindert" in <input type="button" disabled>
im Markup wird als boolesches Attribut durch das W3C .
HTML vs. DOM
Zitat:
Eine Eigenschaft befindet sich im DOM; ein Attribut befindet sich im HTML-Code, der in das DOM geparst wird.
https://stackoverflow.com/a/7572855/664132
JQuery
Verwandt:
Das wichtigste Konzept des Attributs checked ist jedoch, dass es nicht mit der Eigenschaft checked übereinstimmt. Die Attribut entspricht eigentlich der Eigenschaft defaultChecked und sollte nur verwendet werden, um den Anfangswert festzulegen des Kontrollkästchens. Der Wert des Attributs checked ändert sich nicht mit dem Zustand des Ankreuzfeldes, die Eigenschaft checked hingegen schon. Daher ist die browserübergreifend kompatible Art und Weise zu bestimmen, ob ein Kontrollkästchen markiert ist, die Eigenschaft...
Einschlägig:
Eigenschaften wirken sich im Allgemeinen auf den dynamischen Zustand eines DOM-Elements aus, ohne das serialisierte HTML-Attribut zu verändern. Beispiele hierfür sind die value-Eigenschaft von Eingabeelementen, die behindertes Eigentum von Eingängen und Schaltflächen oder die Eigenschaft "checked" eines Kontrollkästchens. Die Methode .prop() sollte zum Setzen von disabled und checked anstelle der Methode .attr() verwendet werden.
$( "input" ).prop( "disabled", false );
Zusammenfassung
Um [...] DOM-Eigenschaften wie den [...] Deaktivierungsstatus von Formularelementen zu ändern, verwenden Sie die .prop() Methode.
( http://api.jquery.com/attr/ )
Was den Teil der Frage betrifft, in dem es um die Verhinderung von Veränderungen geht: Es gibt ein Ereignis namens "Eingabe", aber Browserunterstützung ist begrenzt und es ist nicht ein jQuery-Ereignis, so jQuery wird nicht machen es funktionieren. Das Änderungsereignis funktioniert zuverlässig, wird aber ausgelöst, wenn das Element den Fokus verliert. Also könnte man die beiden kombinieren (manche Leute hören auch auf keyup und paste).
Hier ist ein ungetestetes Stück Code, um zu zeigen, was ich meine:
$(document).ready(function() {
var $submit = $('input[type="submit"]');
$submit.prop('disabled', true);
$('input[type="text"]').on('input change', function() { //'input change keyup paste'
$submit.prop('disabled', !$(this).val().length);
});
});
6 Stimmen
Verwenden Sie removeAttr('disabled') nicht auf diese Weise. Verwenden Sie prop(), um den Zustand umzuschalten. Siehe meine Antwort ou die offizielle Dokumentation .
0 Stimmen
...und Dokumente für
.prop( "disabled", false )