Diese Frage ist 2 Jahre alt, aber es ist immer noch eine gute Frage und es war das erste Google-Ergebnis ... In allen vorhandenen Antworten wird empfohlen , das HTML- Attribut (removeAttr ("disabled")) "disabled" festzulegen und zu entfernen , was nicht der Fall ist der richtige Ansatz. Es gibt viel Verwirrung in Bezug auf Attribut und Eigentum.
HTML
Das "deaktiviert" im <input type="button" disabled>
Markup wird vom W3C als boolesches Attribut bezeichnet .
HTML vs. DOM
Zitat:
Eine Eigenschaft befindet sich im DOM. Ein Attribut befindet sich im HTML-Code, der im DOM analysiert wird.
https://stackoverflow.com/a/7572855/664132
JQuery
Verbunden:
Das wichtigste Konzept für das überprüfte Attribut ist jedoch, dass es nicht der überprüften Eigenschaft entspricht. Das Attribut entspricht tatsächlich der Eigenschaft defaultChecked und sollte nur zum Festlegen des Anfangswertes des Kontrollkästchens verwendet werden. Der aktivierte Attributwert ändert sich nicht mit dem Status des Kontrollkästchens, während dies bei der überprüften Eigenschaft der Fall ist. Daher ist die browserübergreifende Methode, um festzustellen, ob ein Kontrollkästchen aktiviert ist, die Verwendung der Eigenschaft ...
Relevant:
Eigenschaften wirken sich im Allgemeinen auf den dynamischen Status eines DOM-Elements aus, ohne das serialisierte HTML-Attribut zu ändern. Beispiele sind die value-Eigenschaft von Eingabeelementen, die deaktivierte Eigenschaft von Eingaben und Schaltflächen oder die aktivierte Eigenschaft eines Kontrollkästchens. Die Methode .prop () sollte verwendet werden, um deaktiviert und aktiviert anstelle der Methode .attr () zu setzen.
$( "input" ).prop( "disabled", false );
Zusammenfassung
Verwenden Sie die Methode .prop () , um [...] DOM-Eigenschaften wie den [...] deaktivierten Status von Formularelementen zu ändern .
( http://api.jquery.com/attr/ )
Was den Teil zum Deaktivieren bei Änderung betrifft: Es gibt ein Ereignis namens "Eingabe", aber die Browserunterstützung ist begrenzt und es handelt sich nicht um ein jQuery-Ereignis, sodass jQuery nicht funktioniert. Das Änderungsereignis funktioniert zuverlässig, wird jedoch ausgelöst, wenn das Element den Fokus verliert. Man könnte also beide kombinieren (einige Leute hören auch auf Keyup und Paste).
Hier ist ein ungetesteter Code, der zeigt, 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);
});
});