以下代码段中的代码表明,在更改disabled
属性后,我无法检索原始属性值,至少对于disabled
属性。 The jQuery docs暗示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>
&#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,它不可能:/感谢您的建议。
答案 0 :(得分:0)
因为prop
仅在元素具有该属性时才起作用,所以当涉及那些未被禁用的输入字段时,您不会获得它返回的任何值。
同样的问题是使用attr
,因为它会检查元素是否具有该特定属性。
相反,我建议您使用$('#someId:disabled').length
查看您要查找的元素是否具有禁用属性。选择器只能找到那些具有disabled
属性的元素,因此它会产生0
或1
。
请参阅此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);