确定禁用字段集的子元素是否处于禁用状态

6
如果一个输入框由于是禁用的字段集的子节点而被禁用,即使是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>

example: http://jsfiddle.net/cmcnulty/ySWH2/

2个回答

1
“继承”的input在IE中并不真正被禁用,它只是看起来被禁用了,但你仍然可以在其中输入内容。当禁用fieldset时,一个真正可靠的方法是将disabled属性应用于各个输入框,这样它们就会真正被禁用,而你可以通过document.querySelectorAll找到它们。”

这是一个有趣的观察,然而,为了表单提交的目的,输入实际上是被禁用的 - 它不会在表单提交中被提交:http://jsfiddle.net/ySWH2/7/ 此外,选择字段也无法打开 - 进一步突出了它们的“禁用状态”。 - cmcnulty
1
有道理。但是由于它们并没有完全禁用,所以无法通过:disabled选择器找到它们。将disabled应用于输入本身可以使它们可被找到。在您当前的HTML示例中 - 您不能使用document.querySelectorAll('fieldset[disabled] #fieldset_child')选择器吗?http://jsfiddle.net/ySWH2/8/ - Yuriy Galanter

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接