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

发布于 2024-10-22 02:27:20 字数 1106 浏览 1 评论 0 原文

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

With the below sample page I get a different output for IE than I do for other browsers.

<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>

With IE 8 (8.0.7600.16385), the output is "text1text2", with Chrome (10.0.648.127) and Firefox (3.6.13) it is "hidden1hidden2text1text2". This was unexpected to me. Is this a bug in IE or jQuery, or just an expected difference in browsers that jQuery is not accounting for?

Do hidden fields in IE always carry an implicit "disabled"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鯉魚旗 2024-10-29 02:27:20

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

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

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

:enabled 的 jQuery 注释中指出:

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

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

It seems that FF and Chrome assume that even if an element is hidden if it is not disabled it is considered enabled. In IE it seems that assumption is not made and the hidden input is neither considered enabled or disabled. Neither $('input:enabled') or $('input:disabled') runs with hidden elements in IE:

Simple test here: http://jsfiddle.net/KFu4t/4/

Both FF and Chrome show the input as enabled but IE doesn't show it enabled OR disabled.

It is noted on the jQuery comments for :enabled that:

It's not stated specifically in the docs, but this doesn't seem to include inputs of type "hidden".

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

夜吻♂芭芘 2024-10-29 02:27:20

将此行:更改

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

为:

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

change this line:

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

to:

var inputs = $("form input:not(:disabled)");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文