IE中的隐藏字段被视为禁用?

通过下面的示例页面,我得到的IE输出与其他浏览器不同。

  hidden fields test    
$(function() { var inputs = $("form input:enabled"); var concatenated = ''; inputs.each(function() { concatenated = concatenated + $(this).val(); }); alert(concatenated); });

使用IE 8(8.0.7600.16385),输出为“text1text2”,Chrome(10.0.648.127)和Firefox(3.6.13)为“hidden1hidden2text1text2”。 这对我来说意外。 这是IE或jQuery中的错误,还是jQuery不能解决的浏览器的预期差异?

IE中的隐藏字段是否总是带有隐含的“禁用”?

似乎FF和Chrome假设即使某个元素未被禁用而被隐藏,也会被认为已启用。 在IE中,似乎没有做出假设,隐藏的输入既不被认为是启用也不是禁用。 $(’input:enabled’)或$(’input:disabled’)都不会在IE中使用隐藏元素运行:

这里简单测试: http : //jsfiddle.net/KFu4t/4/

FF和Chrome都将输入显示为已启用,但IE未显示已启用或已禁用。

在jQuery注释中注明:启用:

它没有在文档中具体说明,但这似乎不包括“隐藏”类型的输入。

http://api.jquery.com/enabled-selector/

改变这一行:

 var inputs = $("form input:enabled"); 

至:

 var inputs = $("form input:not(:disabled)");