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 に答える