2

同じドキュメントにいくつかのコードを含む div があるとします。

<div id="trigger">Click Me!</div>
<div id="handler">Handler</div>

<script type="text/javascript">
    $("#handler").on('check', function() {alert('Handler is working!');})
    $("#trigger").on('click', function()
       {$("#handler").trigger('check');alert('Trigger is working!')
    })
</script>

期待どおりに動作しています。

ただし、これらすべて.load()をページに挿入すると、(カスタム) ハンドラー イベントではなく、(ネイティブ) トリガー イベントのみが機能します。

タイミングと関係があると思いますが.on()、タイミングの問題を処理することになっていると思いましたか?

編集:ソリューション


私はそれをすべて間違えました。上記と同時にロードされたドキュメントが Jquery ソースへの独自の参照を持っていることを知りませんでした。したがって、別のバージョンの Jquery が、DOM に既に存在するバージョンの上にロードされました。今で.ready()は、元の構文がなくても機能しています。ありがとう!

4

2 に答える 2

2

あなたがやろうとしているのは、要素#handlerが存在する前に要素にアクセスすることです (.load は要素をページに取り込むのに時間がかかります)。

代わりに、.on は、まだ存在しない要素をリッスンする機能もサポートしています。

$("body").on("click", "#handler", function() { alert("Clicked on #handler"); });

これは、後で注入された場合でも、ID #handler を持つ要素のクリックを body 要素 (存在する必要があります) でリッスンします。

于 2013-01-27T16:02:48.273 に答える
1

動的に作成された要素を考慮して、親セレクターを指定する必要があるためです。

例:

$("body").on('check', '#handler', function() {alert('Handler is working!');})

これは良い関連する質問です: jQuery 1.7 on() and off() methods for dynamic elements

于 2013-01-27T16:03:40.583 に答える