以下代码段中的代码演示了更改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
。
不幸的是,根据此评论,这是不可能的:/ 不过感谢您的建议。