这个问题已经2年了,但它仍然是一个很好的问题,它是第一个谷歌的结果.但所有现有的答案都建议设置和移除HTML属性(RemoveAttr(“残障”)“禁用”,这不是正确的方法。属性与属性之间存在许多混淆。
HTML
“残疾人”在标记中称为a布尔属性W3C.
HTML与DOM
引用:属性位于DOM中;属性位于解析为DOM的HTML中。
jQuery
有关:然而,要记住的关于选中属性的最重要的概念是,它不对应于选中的属性。这个属性实际上对应于defaultCheckedProperty和应该仅用于设置初始值。复选框。选中的属性值不会随复选框的状态而改变,而选中的属性则会更改。因此,要确定是否选中复选框,跨浏览器兼容的方法是使用该属性.
相关:属性通常影响DOM元素的动态状态,而不更改序列化的HTML属性。示例包括输入元素的Value属性,伤残财产输入和按钮,或复选框的选中属性。应该使用.prop()方法来设置禁用的.attr()方法,而不是.attr()方法。$( "input" ).prop( "disabled", false );
摘要
致[.]更改DOM属性,如[.]禁用窗体元素的状态,请使用.支柱()方法。
至于禁用“更改”部分问题:有一个名为“输入”的事件,但是浏览器支持有限而且它不是jQuery事件,所以jQuery不会让它工作。更改事件工作可靠,但在元素失去焦点时触发。因此,可以将两者结合起来(有些人还会听键盘和粘贴)。
这里有一段未经测试的代码来说明我的意思:$(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);
});});