Questa domanda ha 2 anni ma è comunque una buona domanda ed è stato il primo risultato di Google ... ma tutte le risposte esistenti raccomandano di impostare e rimuovere l' attributo HTML (removeAttr ("disabled")) "disabled", che non è l'approccio giusto. C'è molta confusione riguardo l'attributo contro la proprietà.
HTML
Il "disabilitato" nel <input type="button" disabled>
markup è chiamato un attributo booleano dal W3C .
HTML vs. DOM
Citazione:
Una proprietà è nel DOM; un attributo si trova nel codice HTML che viene analizzato nel DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Relazionato:
Tuttavia, il concetto più importante da ricordare sull'attributo controllato è che non corrisponde alla proprietà controllata. L' attributo corrisponde effettivamente alla proprietà defaultChecked e deve essere utilizzato solo per impostare il valore iniziale della casella di controllo. Il valore dell'attributo controllato non cambia con lo stato della casella di controllo, mentre la proprietà selezionata lo fa. Pertanto, il modo compatibile con più browser per determinare se una casella di controllo è selezionata è utilizzare la proprietà ...
rilevante:
Le proprietà generalmente influenzano lo stato dinamico di un elemento DOM senza modificare l'attributo HTML serializzato. Gli esempi includono la proprietà value degli elementi di input, la proprietà disabilitata di input e pulsanti o la proprietà selezionata di una casella di controllo. Il metodo .prop () dovrebbe essere usato per impostare disabilitato e controllato al posto del metodo .attr ().
$( "input" ).prop( "disabled", false );
Sommario
Per [...] modificare proprietà DOM come lo stato [...] disabilitato di elementi del modulo, utilizzare il metodo .prop () .
( http://api.jquery.com/attr/ )
Per quanto riguarda la disabilitazione in modifica parte della domanda: esiste un evento chiamato "input", ma il supporto del browser è limitato e non è un evento jQuery, quindi jQuery non lo farà funzionare. L'evento change funziona in modo affidabile, ma viene generato quando l'elemento perde lo stato attivo. Quindi uno potrebbe combinare i due (alcune persone ascoltano anche keyup e paste).
Ecco un pezzo di codice non testato per mostrare cosa intendo:
$(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);
});
});