1

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

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

次のことを行います。

  • <tr>それらを別のテーブルにコピーします
  • <tr>s内の画像のクリックイベントを保持します(true引数のため)

それはすべてうまくいきます。これで、これらにjQuery Listenイベントを追加した<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()プラグインの作成者は、別の戦略を提案しました。以下の私の回答を参照してください。

4

1 に答える 1

1

listen() プラグインの作成者である Ariel Flesler は、メールで次のアドバイスをくれました。

「これは別の方法で解決できると思います。Listen (およびイベント委任) のアイデアは、新しい要素のイベントのすべてのコピーを実際に回避することです。」

「あなたは簡単にできる:」

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

"あるいは:"

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

「最初の例では、テーブルをリスナーとして使用します。2 番目の例では、 <html>タグが使用されます。したがって、新しい td/tr/tables を追加しても、引き続き機能します。」

于 2008-12-13T22:59:58.907 に答える