4

ここに私のリンクがあります:

http://tinyurl.com/6j727e

test.php のリンクをクリックすると、jquery 'facebox' スクリプトを使用するモーダル ボックスが開きます。

このボックスでクリック イベントを処理しようとしています。test.php のソースを表示すると、モーダル ボックス内でリンクを見つけようとしている場所がわかります。

    $('#facebox .hero-link').click(alert('click!'));

ただし、クリックは検出されず、奇妙なことに、ページの読み込み時にクリック イベントが実行されます。

ただし、閉じるボタンにはボックスを閉じるクリックイベントが組み込まれています。自家製のクリックイベントが何らかの形で防止されていると思われますが、わかりません。

誰でも助けることができますか?通常、それはプロジェクトの最後の部分であり、いつものように私を支えています ;)

4

2 に答える 2

9

まず、ドキュメントの読み込み時にアラートが表示される理由は、#clickメソッドが引数として関数を受け取るためです。代わりに、 の戻り値を渡しました。これによりalert、アラート ダイアログがすぐに表示され、null が返されます。

イベント バインディングが機能しない理由は、ドキュメントの読み込み時に#facebox .hero-linkまだ存在していないためです。これを修正するのに役立つ 2 つのオプションがあると思います。

オプション 1) フェイスボックスが表示された後にのみ、クリック イベントをバインドします。何かのようなもの:

$(document).bind('reveal.facebox', function() {
  $('#facebox .hero-link').click(function() { alert('click!'); });
});

オプション 2) jQuery Live Query プラグインの使用を検討する

Live Query は、ページが読み込まれて DOM が更新された後でも、自動的にイベントをバインドしたり、一致した要素のコールバックを起動したりすることで、jQuery セレクターの機能を利用します。

jQuery Live Query は、Facebox が DOM を変更したことを認識すると、クリック イベントを自動的にバインドします。次に、これを書くだけでよいはずです:

$('#facebox .hero-link').click(function() { alert('click!'); });
于 2008-12-08T17:47:20.207 に答える
1

または、イベント委任を使用します

これは基本的に、すべての要素ではなくコンテナにイベントをフックし、コンテナイベントのevent.targetをクエリします。

コードノイズを減らす(再バインドする必要がない)という点で複数の利点があります。また、ブラウザーのメモリでも簡単です(DOMにバインドされるイベントが少ない)。

ここでの簡単な例

簡単なイベント委任のためのjQueryプラグイン

PSイベントの委任は、間もなくリリースされる次のリリース(1.3)に組み込まれる予定です。

于 2008-12-08T19:14:44.147 に答える