jQuery Listen プラグイン イベントを複製するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/356990

質問

いくつか持っています <tr> 私のページ上の要素 click() それぞれの中にある画像に添付されたイベント。このコードを使用します

$(this).clone(true).appendTo("table#foo");

次のことを行うには:

  • それらをコピーします <tr>別のテーブルに
  • 画像のクリック イベントを内部に保存します。 <tr>s (理由は、 true 口論)

それはすべてうまくいきます。今、私はを追加しました jQueryリッスン そんな方へのイベント <tr>ユーザーが正確に狙う必要がないようにします。どこでもクリックできます <tr> 画像にクリックを渡すことができます。

次のようにコード化されています。

$('tr.record').listen('click','td',function(){
  $(this).parent().find("img.clickable").click();
});

listen() イベントは元の項目では正常に動作しますが、 クローン化されたアイテムでは、listen() イベントは失敗します。 画像のクリックイベントは引き続き正常に動作します。

Firebug が私に教えてくれたのは次のとおりです。

m(this, e.type) is undefined

...そして、これは jquery.listen-1.0.3-min.js の 9 行目を参照しています。

クローン要素で listen() イベントを機能させるにはどうすればよいですか?

アップデート

デフォルトでは、jQuery はクローン要素のイベントをコピーしませんが、 このプラグイン そうするように作られている。

一方、listen() プラグインの作成者は別の戦略を提案しました - 以下の私の回答を参照してください。

役に立ちましたか?

解決

アリエルFlesler、聞く()プラグインの作成者は、電子メールを介して私にこの助言を与えます:

「私は、これは別の方法で解決することができると思います。という考えは聞く(と イベント委任)は、実際のイベントのすべてのコピーを回避することです 新しい要素。」

"あなたは、単に行うことができます:"

$('table#foo').listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

の "あるいは"

$.listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

"最初の例では、リスナーとして、テーブルを使用します。2 1つでは、 <html>タグが使用されています。だから、どんなに新しいTD / TR /テーブルを追加する場合。それは まだ働いています。」

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top