1

以下代码段中的代码演示了更改disabled属性后,我无法检索原始属性值,至少对于disabled属性而言。jQuery 文档暗示element.getAttribute()应该能够检索原始值。

在此处输入图像描述

但是,它没有检测到select最初没有被禁用。

那么,文档错了吗?布尔属性是否不同?最重要的是,有没有办法在更改后获得原始值prop()

注意 我使用的是 jQuery 1.8.3,它被 Opera 中的 Chromium 37 解释。

$('button').on('click', function() {
  var $inputs = $('input, select');
  $inputs.each(function() {
    var $this = $(this);
    var name = $this.prop('name');
    console.log('before changing ' + name + '...');
    console.log("\tgetAttribute: " + $this[0].getAttribute('disabled'));
    console.log("\tprop: " + $this.prop('disabled'));
    console.log("\tattr: " + $this.attr('disabled'));

    $this.prop('disabled', true);

    console.log('after changing ' + name + '...');
    console.log("\tgetAttribute: " + $this[0].getAttribute('disabled'));
    console.log("\tprop: " + $this.prop('disabled'));
    console.log("\tattr: " + $this.attr('disabled'));
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<button>Click</button>
<input name="input" type="text" disabled='disabled' />
<select name="select">
  <option>Option</option>
  <option>Option</option>
  <option>Option</option>
</select>

编辑

不幸的是,.prop() 与 .attr()的问题实际上并没有回答有关禁用之类的布尔属性的问题。考虑这个小提琴:http: //jsfiddle.net/garreh/uLQXc。它在 1.8.3 下运行良好。现在,考虑这个分支,它改变了“禁用”而不是“废话”:http: //jsfiddle.net/wrn1ryjq/1。输入最初未被禁用。更改后,即使 attr 返回“已禁用”。因此, attr 返回原始值的股票答案似乎不正确。我的问题仍然存在:用 prop 更改后,我如何找出禁用的原始状态?

编辑 嗯,这很尴尬。当然attr()不会检索到原始值。文档说不会。真正的问题是,如何在使用 with 禁用后从输入中获取 disabled 的原始值prop

不幸的是,根据此评论,这是不可能的:/ 不过感谢您的建议。

4

1 回答 1

0

因为,prop仅当元素确实具有该属性时才有效,因此当涉及到那些未禁用的输入字段时,您不会得到它返回的任何值。

同样的问题是使用attr它会检查元素是否具有该特定属性。

相反,我建议您使用它$('#someId:disabled').length来查看您要查找的元素是否具有 disabled 属性。选择器将只能找到那些具有disabled属性的元素,因此它将导致 a0或 a 1

看到这个小提琴

HTML

<input id="input1" disabled />
<input id="input2" disabled="true" />
<input id="input3" />

Javascript

$('#result').append($('#input1:disabled').length);
$('#result').append($('#input2:disabled').length);
$('#result').append($('#input3:disabled').length);
于 2014-09-27T02:31:45.227 回答