2

建议使用.prop()而不是.attr()设置disabled属性,但我发现.prop()并非在所有情况下都有效。

例如在 twitter 引导模式窗口中:http: //twitter.github.com/bootstrap/javascript.html#modals

按“启动演示模式”按钮并在控制台中运行:

$('#myModal .btn').prop('disabled', true);

那么按钮将不会被禁用。但是如果你运行:

$('#myModal .btn').attr('disabled', true);

那么它们将被成功禁用。

任何想法为什么会发生?

4

1 回答 1

5

这个问题突出了 .prop() 和 .attr() 之间的混淆。.attr() 方法直接处理 HTML 元素的属性,而 .prop() 处理底层 JavaScript 元素的 JavaScript 属性。

例如,虽然$('#myInput').attr('disabled', true)$('#myInput').prop('disabled', true)具有相同的影响,但它们实际上以两种截然不同的方式运作。

$('#myInput').attr('disabled', true)相当于document.getElementById('myInput').setAttribute('disabled', 'disabled');

并且$('#myInput').prop('disabled', true)将相当于document.getElementById('myInput').disabled = true;

虽然后一个示例具有在元素上创建“禁用”属性的附加效果,但这是disabled浏览器本机处理的输入属性的一个特性。

您的示例的问题是您正在尝试对在其 JavaScript 对象上$('#myModal .btn')没有本机属性的锚元素进行操作。disabled因此,设置.disabled = true只不过是设置.foo = 'bar'。浏览器本身不会为这些元素添加属性。

我希望这是有道理的。如果需要更多说明,我稍后会进行编辑。

于 2012-05-04T03:38:12.300 回答