这个问题已有2年历史了,但它仍然是一个很好的问题,它是Google的第一个结果...但是所有现有答案都建议设置和删除 HTML 属性(removeAttr(“ disabled”))“ disabled”,而不是正确的方法。关于属性与属性存在很多困惑。
的HTML
W3C<input type="button" disabled>
将标记中的“ disabled” 称为boolean属性。
HTML与DOM
引用:
属性在DOM中;HTML中的一个属性被解析为DOM。
https://stackoverflow.com/a/7572855/664132
jQuery查询
有关:
但是,要记住有关选中属性的最重要概念是它不对应于选中属性。该属性实际上对应于defaultChecked属性,并且应仅用于设置复选框的初始值。选中的属性值不会随着复选框的状态而改变,而选中的属性会改变。因此,确定是否选中复选框的跨浏览器兼容方法是使用属性...
相关:
属性通常会在不更改序列化HTML属性的情况下影响DOM元素的动态状态。示例包括输入元素的value属性,输入和按钮的Disabled属性或复选框的checked属性。应该使用.prop()方法而不是.attr()方法来设置禁用和检查状态。
$( "input" ).prop( "disabled", false );
摘要
要更改DOM属性,例如表单元素的禁用状态,请使用.prop()方法。
(http://api.jquery.com/attr/)
至于问题的禁用更改部分:有一个名为“输入”的事件,但是浏览器支持受到限制,并且它不是jQuery事件,因此jQuery不会使其起作用。change事件工作可靠,但是在元素失去焦点时会触发。因此,可以将两者结合在一起(有些人也听键盘和粘贴操作)。
这是一段未经测试的代码来显示我的意思:
$(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);
});
});