1

使用下面的示例页面,我得到的 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中的隐藏字段总是带有隐含的“禁用”吗?

4

2 回答 2

4

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

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

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

在 :enabled 的 jQuery 注释中指出:

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

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

于 2011-03-11T20:24:11.640 回答
3

改变这一行:

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

到:

var inputs = $("form input:not(:disabled)");
于 2011-03-11T20:01:39.753 回答