Cette question a 2 ans mais c'est toujours une bonne question et c'était le premier résultat de Google ... mais toutes les réponses existantes recommandent de définir et de supprimer l' attribut HTML (removeAttr ("disabled")) "disabled", ce qui n'est pas la bonne approche. Il y a beaucoup de confusion entre attribut et propriété.
HTML
Le "désactivé" dans <input type="button" disabled>
le balisage est appelé attribut booléen par le W3C .
HTML contre DOM
Citation:
Une propriété est dans le DOM; un attribut est dans le HTML qui est analysé dans le DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
En relation:
Néanmoins, le concept le plus important à retenir à propos de l'attribut vérifié est qu'il ne correspond pas à la propriété vérifiée. L' attribut correspond en fait à la propriété defaultChecked et ne doit être utilisé que pour définir la valeur initiale de la case à cocher. La valeur d'attribut vérifiée ne change pas avec l'état de la case à cocher, contrairement à la propriété vérifiée. Par conséquent, la façon compatible avec tous les navigateurs de déterminer si une case à cocher est cochée consiste à utiliser la propriété ...
Pertinent:
Les propriétés affectent généralement l'état dynamique d'un élément DOM sans modifier l'attribut HTML sérialisé. Les exemples incluent la propriété value des éléments d'entrée, la propriété désactivée des entrées et des boutons ou la propriété cochée d'une case à cocher. La méthode .prop () doit être utilisée pour définir désactivé et vérifié au lieu de la méthode .attr ().
$( "input" ).prop( "disabled", false );
Sommaire
Pour [...] modifier les propriétés DOM telles que l'état [...] désactivé des éléments de formulaire, utilisez la méthode .prop () .
( http://api.jquery.com/attr/ )
En ce qui concerne la partie désactivation lors du changement de la question: il existe un événement appelé "entrée", mais la prise en charge du navigateur est limitée et ce n'est pas un événement jQuery, donc jQuery ne le fera pas fonctionner. L'événement change fonctionne de manière fiable, mais est déclenché lorsque l'élément perd le focus. Donc, on pourrait combiner les deux (certaines personnes écoutent également la saisie et le collage).
Voici un morceau de code non testé pour montrer ce que je veux dire:
$(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);
});
});