getAttribute()不检索禁用的原始值

时间:2014-09-26 23:04:40

标签: javascript jquery prop

以下代码段中的代码表明,在更改disabled属性后,我无法检索原始属性值,至少对于disabled属性。 The jQuery docs暗示element.getAttribute()应该能够检索原始值。

enter image description here

但是,它没有检测到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>
&#13;
&#13;
&#13;

修改

不幸的是,.prop() vs .attr()的问题在布尔属性(如禁用)方面实际上并没有回答这个问题。考虑一下这个小提琴:http://jsfiddle.net/garreh/uLQXc。它在1.8.3下工作正常。现在,考虑一下这个改变“禁用”的叉子。而不是&#39; blah&#39;:http://jsfiddle.net/wrn1ryjq/1。输入最初未禁用。在被改变之后,即使是attr返回&#39;禁用&#39;。因此,attr返回原始值的股票回答似乎不是真的。我的问题仍然存在:用道具改变后,我如何找出原来的残疾人状态?

修改 那令人尴尬。当然attr()无法检索原始值。文档说它不会。真正的问题是,如何在使用prop禁用后从输入中获取已禁用的原始值。

不幸的是,根据this comment,它不可能:/感谢您的建议。

1 个答案:

答案 0 :(得分:0)

因为prop仅在元素具有该属性时才起作用,所以当涉及那些未被禁用的输入字段时,您不会获得它返回的任何值。

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

相反,我建议您使用$('#someId:disabled').length查看您要查找的元素是否具有禁用属性。选择器只能找到那些具有disabled属性的元素,因此它会产生01

请参阅此fiddle

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);