Esta pergunta tem 2 anos, mas ainda é uma boa pergunta e foi o primeiro resultado do Google ... mas todas as respostas existentes recomendam configurar e remover o atributo HTML (removeAttr ("disabled")) "disabled", que não é a abordagem correta. Há muita confusão sobre atributo versus propriedade.
HTML
O "desativado" na <input type="button" disabled>
marcação é chamado de atributo booleano pelo W3C .
HTML vs. DOM
Citar:
Uma propriedade está no DOM; um atributo está no HTML que é analisado no DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Relacionado:
No entanto, o conceito mais importante a ser lembrado sobre o atributo verificado é que ele não corresponde à propriedade marcada. O atributo realmente corresponde à propriedade defaultChecked e deve ser usado apenas para definir o valor inicial da caixa de seleção. O valor do atributo marcado não muda com o estado da caixa de seleção, enquanto a propriedade marcada. Portanto, a maneira compatível com vários navegadores para determinar se uma caixa de seleção está marcada é usar a propriedade ...
Relevante:
As propriedades geralmente afetam o estado dinâmico de um elemento DOM sem alterar o atributo HTML serializado. Os exemplos incluem a propriedade value de elementos de entrada, a propriedade desativada de entradas e botões ou a propriedade marcada de uma caixa de seleção. O método .prop () deve ser usado para definir desativado e verificado em vez do método .attr ().
$( "input" ).prop( "disabled", false );
Sumário
Para alterar propriedades do DOM, como o estado [...] desabilitado dos elementos do formulário, use o .prop () método .
( http://api.jquery.com/attr/ )
Quanto à desativação na alteração da parte da pergunta: existe um evento chamado "input", mas o suporte ao navegador é limitado e não é um evento jQuery, portanto, o jQuery não fará com que funcione. O evento de mudança funciona de maneira confiável, mas é acionado quando o elemento perde o foco. Então, pode-se combinar os dois (algumas pessoas também escutam as teclas e colam).
Aqui está um trecho de código não testado para mostrar o que quero dizer:
$(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);
});
});