1

<form>過去1日半の間、jQueryがHTML内の要素を見つけることができないというこの問題がありました。HTML をバリデーターで何度も実行し、JS と CSS を検証し、不要な JS と CSS ファイルを削除しました。これは次のようになりました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css" />
</head>

<body>
    <form>
        <input type="textbox" name="action" value="view"></input>
        <button>Test</button>
    </form>
</body>
</html>

HTML を必要最小限に縮小した後、jQuery が<form>を使用して要素を 簡単に取得できるかどうかを確認し$('form')ました。まあ、jQuery は何も返しませんでした。それは完全にがっかりしました。jQuery オブジェクトでさえ、何も返しませんでした。それで、再び私は狂気を続け、HTMLなどを検証しましたが、まだ何もありません!

HTML をもう一度書き直しましたが、まったく同じではありませんでしたが、うまくいきました。そこで、2 つのファイルを diff し、元のファイルを微調整して、作成したばかりの新しいファイルと徐々に同一になるようにしました。nameさて、属性の値がすべてを台無しにしていた原因であることが判明しました! 値を許可されたもの以外に変更するだけで、actionjQuery は最終的に<form>要素を取得できます! 本当?!!@#%$!@#!!!

だから私の質問は次のとおりです: jQueryのキーワードですかaction、属性の値はどのようにすべてを台無しにしますか?

それがキーワードであり、その理由を説明したくない場合は、これに関するドキュメントを参照してください。これを読んだ後で頭を悩ませることができます。属性の値によって問題が発生するというのは、やはり奇妙に思えますが、それはおそらく、私が jQuery の実装について無知であるためです。=)

4

6 に答える 6

1

問題を再現できません

このサイトをチェックしてくださいhttp://jsbin.com/ixixu3

すべてのalert異なるセレクターに対して常に1が表示されます(Opera 10.10、IE6、FF 3.5.6でテスト済み)

于 2009-12-23T17:35:54.950 に答える
1

サンプルコードをコピーして貼り付けて追加しました

<script type="text/javascript">
    jQuery('form').html('It works fine');
</script>

…フォーム要素の後。フォームの内容は「正常に動作します」に置き換えられたので、いいえ、jQuery にはその問題はありません。

于 2009-12-23T16:03:42.177 に答える
1

アクションはjQueryのキーワードですか?属性の値はどのようにすべてを台無しにしますか?

いいえそうではありません。あなたの問題は別の場所にあります。ページの読み込みが完了するのを待つのではなく、HTML ヘッドで直接フォームを取得しようとしている可能性があります。

たとえば、あなたがした

<script>
    alert($('form').length); // May return 0 depending on the browser used.
</script>
...
<form>
    ...
</form>

それ以外の

<script>
    $(document).ready(function() {
        alert($('form').length); // Always returns 1.
    });
</script>
...
<form>
    ...
</form>
于 2009-12-23T16:01:43.227 に答える
1

私の記憶が正しければ、name="action" を使用すると、Internet Explorer (6) で問題が発生する可能性があります。どういうわけかアクションは予約語です。思った結果を覚えていませんが、うまくいきませんでした。したがって、MSIE を使用している場合は、別のブラウザーも試してください。

于 2009-12-23T16:24:43.793 に答える
0

皆様、情報ありがとうございます。私は FF3.5 を使用し、Firebug コンソールを使用してテストしていたことに言及する必要がありました。ページをロードしてから$('form')、Firebug で実行します。name属性を に設定すると、毎回何も返されませんでしたaction。別のものに変更した後、Firebug コンソールで同じコード行を実行すると機能します。

みんなの投稿を読んだ後、セクションに<script>要素を追加して HTML を編集しました。<head>

<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css" />
    <script type="text/javascript">
        $(function(){
           alert($('form').length); 
        });
    </script>
</head>

これは完全にうまくいきました。したがって、私のエラーはテスト方法にあったと思います。$('form').lengthFirebug コンソールで使用しても何も得られません。代わりにこの行を使用する必要がありました: $(function(){$('form');});$(function(){$('form');})` Firebug コンソール; 私は間違っていた。

教訓: Firebug の場合でも、要素を選択する前にドキュメントの準備ができているかどうかを確認する必要があります。

それでも気になるのは、name属性が ではない action場合、元のテスト方法が Firebug コンソールで機能することです。したがって、おそらく本当の質問は次のようになるべきでした:要素の属性の値持つ Firebug のビーフは何ですか? actionname<input>ああ、それは別の機会に取っておきます。

助けてくれてありがとう!あなたのすべての投稿が私をこの最終的な認識に導きます。残念ですが、全員にチェックマークを付けることができませんが、全員に投票します!

于 2009-12-24T17:17:41.267 に答える
0

ACTION は FORM タグの必須属性です。

編集

与えられた例は有効な HTML ではありません。試す:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        $('form').css({"border":"1px solid red"});
    });
    </script>
</head>
<body>
    <form action="">
    <fieldset><legend>Test</legend>
        <input type="text" name="action" value="view"/>
        <button>Test</button>
        </fieldset>
    </form>
</body>
</html>
于 2009-12-23T16:01:39.717 に答える