To pytanie ma 2 lata, ale nadal jest dobrym pytaniem i był to pierwszy wynik Google ... ale wszystkie istniejące odpowiedzi zalecają ustawienie i usunięcie atrybutu HTML (removeAttr („disabled”)) „disabled”, co nie jest właściwe podejście. Istnieje wiele nieporozumień dotyczących atrybutu vs. własności.
HTML
„Wyłączone” w <input type="button" disabled>
znacznikach jest nazywane przez W3C atrybutem logicznym .
HTML vs. DOM
Zacytować:
Właściwość znajduje się w DOM; atrybut znajduje się w HTML, który jest analizowany w DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Związane z:
Niemniej jednak najważniejszą koncepcją, o której należy pamiętać o sprawdzonym atrybucie, jest to, że nie odpowiada on sprawdzonej właściwości. Atrybut faktycznie odpowiada właściwości defaultChecked i powinien być używany tylko do ustawiania wartości początkowej z wyboru. Sprawdzona wartość atrybutu nie zmienia się wraz ze stanem pola wyboru, podczas gdy sprawdzana właściwość zmienia się. Dlatego zgodnym z wieloma przeglądarkami sposobem ustalenia, czy pole wyboru jest zaznaczone, jest użycie właściwości ...
Istotnych:
Właściwości ogólnie wpływają na stan dynamiczny elementu DOM bez zmiany serializowanego atrybutu HTML. Przykłady obejmują właściwość wartości elementów wejściowych, wyłączoną właściwość danych wejściowych i przycisków lub sprawdzoną właściwość pola wyboru. Należy zastosować metodę .prop (), aby ustawić wyłączoną i zaznaczoną zamiast metody .attr ().
$( "input" ).prop( "disabled", false );
Podsumowanie
Aby [...] zmienić właściwości DOM, takie jak [...] wyłączony stan elementów formularza, użyj metody .prop () .
( http://api.jquery.com/attr/ )
Co do części dotyczącej wyłączania przy zmianie: zdarzenie o nazwie „wejście”, ale obsługa przeglądarki jest ograniczona i nie jest to zdarzenie jQuery, więc jQuery nie sprawi, że będzie działać. Zdarzenie zmiany działa niezawodnie, ale jest uruchamiane, gdy element traci fokus. Można więc połączyć te dwa elementy (niektóre osoby również słuchają kluczy i wklejają).
Oto niesprawdzony fragment kodu, który pokazuje, co mam na myśli:
$(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);
});
});