Esta pregunta tiene 2 años, pero sigue siendo una buena pregunta y fue el primer resultado de Google ... pero todas las respuestas existentes recomiendan configurar y eliminar el atributo HTML (removeAttr ("disabled")) "disabled", que no es El enfoque correcto. Hay mucha confusión con respecto al atributo frente a la propiedad.
HTML
El "deshabilitado" en <input type="button" disabled>
el marcado se denomina atributo booleano por el W3C .
HTML contra DOM
Citar:
Una propiedad está en el DOM; un atributo está en el HTML que se analiza en el DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Relacionado:
Sin embargo, el concepto más importante para recordar sobre el atributo marcado es que no corresponde a la propiedad marcada. El atributo en realidad corresponde a la propiedad defaultChecked y debe usarse solo para establecer el valor inicial de la casilla de verificación. El valor del atributo marcado no cambia con el estado de la casilla de verificación, mientras que la propiedad marcada sí. Por lo tanto, la forma compatible con varios navegadores para determinar si una casilla de verificación está marcada es usar la propiedad ...
Pertinente:
Las propiedades generalmente afectan el estado dinámico de un elemento DOM sin cambiar el atributo HTML serializado. Los ejemplos incluyen la propiedad de valor de los elementos de entrada, la propiedad deshabilitada de las entradas y los botones, o la propiedad marcada de una casilla de verificación. El método .prop () debe usarse para establecer deshabilitado y marcado en lugar del método .attr ().
$( "input" ).prop( "disabled", false );
Resumen
Para cambiar las [...] propiedades DOM, como el estado [...] deshabilitado de los elementos de formulario, use el método .prop () .
( http://api.jquery.com/attr/ )
En cuanto a la desactivación al cambiar parte de la pregunta: hay un evento llamado "entrada", pero el soporte del navegador es limitado y no es un evento jQuery, por lo que jQuery no lo hará funcionar. El evento de cambio funciona de manera confiable, pero se dispara cuando el elemento pierde el foco. Por lo tanto, uno podría combinar los dos (algunas personas también escuchan keyup y pegar).
Aquí hay un fragmento de código no probado para mostrar lo que quiero decir:
$(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);
});
});