Câu hỏi này đã được 2 năm nhưng đây vẫn là một câu hỏi hay và đó là kết quả đầu tiên của Google ... nhưng tất cả các câu trả lời hiện tại đều khuyên bạn nên cài đặt và xóa thuộc tính HTML (removeAttr ("bị vô hiệu hóa")), "không bị" cách tiếp cận đúng. Có rất nhiều nhầm lẫn về thuộc tính so với tài sản.
HTML
"Vô hiệu hóa" trong <input type="button" disabled>
đánh dấu được W3C gọi là thuộc tính boolean .
HTML so với DOM
Trích dẫn:
Một thuộc tính nằm trong DOM; một thuộc tính có trong HTML được phân tích cú pháp vào DOM.
https://stackoverflow.com/a/7572855/664132
JQuery
Liên quan:
Tuy nhiên, khái niệm quan trọng nhất cần nhớ về thuộc tính được kiểm tra là nó không tương ứng với thuộc tính được kiểm tra. Các thuộc tính thực sự tương ứng với tài sản defaultChecked và nên được sử dụng chỉ để thiết lập các giá trị ban đầu của hộp kiểm. Giá trị thuộc tính được kiểm tra không thay đổi theo trạng thái của hộp kiểm, trong khi thuộc tính được kiểm tra thì không. Do đó, cách tương thích với nhiều trình duyệt để xác định xem hộp kiểm có được chọn hay không là sử dụng thuộc tính ...
Liên quan, thích hợp:
Các thuộc tính thường ảnh hưởng đến trạng thái động của phần tử DOM mà không thay đổi thuộc tính HTML được tuần tự hóa. Ví dụ bao gồm thuộc tính giá trị của các thành phần đầu vào, thuộc tính bị vô hiệu hóa của các đầu vào và nút hoặc thuộc tính được kiểm tra của hộp kiểm. Phương thức .prop () nên được sử dụng để đặt bị vô hiệu hóa và được kiểm tra thay vì phương thức .attr ().
$( "input" ).prop( "disabled", false );
Tóm lược
Để [...] thay đổi các thuộc tính DOM như trạng thái của các phần tử biểu mẫu bị vô hiệu hóa [...], hãy sử dụng phương thức .prop () .
( http://api.jquery.com/attr/ )
Về phần vô hiệu hóa phần thay đổi của câu hỏi: Có một sự kiện gọi là "đầu vào", nhưng hỗ trợ trình duyệt bị hạn chế và đó không phải là sự kiện jQuery, vì vậy jQuery sẽ không làm cho nó hoạt động. Sự kiện thay đổi hoạt động đáng tin cậy, nhưng được kích hoạt khi phần tử mất tiêu điểm. Vì vậy, người ta có thể kết hợp cả hai (một số người cũng nghe keyup và dán).
Đây là một đoạn mã chưa được kiểm tra để thể hiện điều tôi muốn nói:
$(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);
});
});