Javascript 在禁用字段集的子级时确定禁用状态元素

Javascript 在禁用字段集的子级时确定禁用状态元素,javascript,dom,Javascript,Dom,如果输入被禁用,因为它是禁用字段集的子项,IE(甚至11)似乎没有任何方法确定它被禁用。有没有办法不用搜索树就可以确定 显然,我可以使用jQuery查找最近的字段集,并检查它是否被禁用(如果它存在的话),但这似乎有点骇人听闻,更不用说潜在的昂贵了。我可以查看currentStyle以确定它是否变灰了,但这更令人讨厌。我错过什么了吗 <fieldset disabled> <input id="fieldset_child" type="text" value="Inheri

如果输入被禁用,因为它是禁用字段集的子项,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>

//IE 9-11返回0,而不是像Firefox和Chrome那样返回1
console.log(document.queryselectoral('#fieldset_child:disabled').length);
//在所有浏览器中返回false
console.log(document.getElementById('fieldset_child')。已禁用);

示例:

IE中的“继承”
输入并没有真正禁用,它只是显示为禁用,您仍然可以在其中输入。禁用
字段集
时禁用子输入的真正简单方法是将
disabled
属性应用于单个输入。然后它们将被真正禁用,您将能够通过
document.querySelectorAll

找到它们。好的,Internet Explorer公开了一个名为isDisabled()的属性,它是如何跟踪继承其禁用性的内容的。使用它,结合测试节点名以仅检查各种表单元素,您可以以良好的性能确定是否禁用了某些内容。未在IE6-7中测试。

这是一个有趣的观察结果,但是,为了表单提交的目的,输入实际上是禁用的-它不是在表单提交中提交的:而且,选择字段不能打开-进一步突出显示它们的“禁用”是有意义的。但由于它们没有“完全”禁用,因此无法通过
:disabled
选择器找到它们。对输入本身应用
disabled
,使其可查找。正如您当前的HTML示例中所示,您不能改用
document.queryselectoral('fieldset[disabled]#fieldset\u child')
选择器吗?