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

时间:2011-03-11 19:59:26

标签: jquery internet-explorer cross-browser hidden-field

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

<html>
<head>
    <title>hidden fields test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
</head>
<body>
    <form>
        <input type="hidden" value="hidden1" />
        <input type="hidden" value="hidden2" />
        <input type="text" value="text1" />
        <input type="text" value="text2" />
    </form>
    <script type="text/javascript">
        $(function() {
            var inputs = $("form input:enabled");
            var concatenated = '';
            inputs.each(function() {
                concatenated = concatenated + $(this).val();
            });

            alert(concatenated);
        });
    </script>
</body>
</html>

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

IE中的隐藏字段是否始终带有隐式“禁用”?

2 个答案:

答案 0 :(得分:4)

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

此处进行简单测试:http://jsfiddle.net/KFu4t/4/

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

在jQuery评论中注明:启用:

  

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

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

答案 1 :(得分:3)

更改此行:

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

为:

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