在禁用字段集的子节点时确定禁用的状态元素

时间:2014-01-22 23:25:46

标签: javascript dom

如果输入被禁用,因为它是禁用字段集的子节点,则IE(甚至11)似乎没有任何方法可以确定它已被禁用。有没有办法确定不搜索树?

显然,我可以使用jQuery来查找最接近的字段集,并检查是否存在该字段集是否已禁用,但这看起来很糟糕,更不用说可能很昂贵了。我可以查看currentStyle以确定它是否显示为灰色 - 但这更加黑客。我错过了什么吗?

<fieldset disabled>
  <input id="fieldset_child" type="text" value="Inherit Disabled" />
</fieldset>

<script>
  // IE 9-11 returns zero instead of one like Firefox and Chrome do
  console.log(document.querySelectorAll('#fieldset_child:disabled').length);

  // this return false in all browsers 
  console.log(document.getElementById('fieldset_child').disabled);
</script>

示例:http://jsfiddle.net/cmcnulty/ySWH2/

2 个答案:

答案 0 :(得分:1)

IE中并未真正禁用“继承”input,只是显示已禁用,您可以仍然输入。禁用fieldset时禁用子输入的一种真正万无一失的方法是将disabled属性应用于各个输入。然后他们将被真正禁用,您将能够通过document.querySelectorAll

找到他们

答案 1 :(得分:1)

好的,事实证明Internet Explorer公开了一个名为isDisabled(http://msdn.microsoft.com/en-us/library/ie/ms533902%28v=vs.85%29.aspx)的属性,它跟踪继承其禁用的内容。使用它,结合测试nodeName以仅检查各种表单元素,您可以确定性能是否被禁用。在IE6-7中未经测试。