3

本文にある次のHTML5コードについて考えてみます。

<p id="p1">
    Email: <input type="text" name="email" /><br />
    Name: <input type="text" name="name" /><br />
    <input type="submit" name="submit" value="Submit" />
</p>
<p id="p2">
    <form action="/index.php">
        Email: <input type="text" name="email" /><br />
        Name: <input type="text" name="name" /><br />
        <input type="submit" name="submit" value="Submit" />
    </form>
</p>

そして、次のjavascriptコード:

$(document).ready(function() {
    alert("$(#p1 input).length: " + $("#p1 input").length + "\n$(#p2 input).length: " + $("#p2 input").length);
});​

さまざまなブラウザの出力は次のとおりです。

Internet Explorer 9.0.8112.16421

$(#p1 input).length: 3
$(#p2 input).length: 3

Chromiumバージョン20.0.1132.47Ubuntu12.04(144678)

$(#p1 input).length: 3
$(#p2 input).length: 0

Ubuntu17.0.1用のMozillaFirefox

$(#p1 input).length: 3
$(#p2 input).length: 0

誰かが理由を説明できますか?

http://jsfiddle.net/LKStL/2/

4

1 に答える 1

1

私のコメントを詳しく説明します:

のようなブロック要素は、要素form内では許可されていませんp。これは無効なHTMLであるため、jQueryはそれを解析しようとして失敗します。ExplorerはHTMLレンダリング標準に準拠していないため、Internet Explorerで機能する可能性があると推測できます(つまり、機能しないはずですが、機能しません)。

解決策:タグformを、の外側に配置するか、のようなブロック要素を許可する要素にp変更します。pdiv

于 2012-12-05T13:47:05.923 に答える