0

一連のデータのビューアーを作成するフィドルがあります。JavaScript を見ている場合は、SEARCH_HEREを検索すると 3 行が表示されます。

$("body").append("TEMPLATE<hr />Maintaining Object").append($maintence);
//$("body").html($maintence);
//$("body").html($_table);

フィドルは http://jsfiddle.net/fallenreaper/wFGW6/1/にあります。

最初のものはページにテンプレートを表示し、次に新しいアイテムを追加すると、実行時にすべての作業イベントが発生します

var $data = $_table.clone(true,true);

addBlock()関数で。

2 行目のコメントのみを外すと、メンテナーの項目が表示されます。項目[+]を追加する と、フォームは表示されますが、イベントは表示されません。

$_table がページから削除されたため、イベントはもう存在しないと考えていました。3 行目では、ドキュメントに $_table をほぼ再追加していますが、イベントはありません。

これはこういうことなのでしょうか。代わりに、 addBlock()内で実行されるラッパー関数を作成して、それに応じてすべてのハンドラーをアタッチする必要がありますか?

これはかなり奇妙です。

編集:

1つの答えは、委任されたイベントを指していましたが、これはうまくいくようです. $(this) を、選択した要素ではなく新しいオブジェクトである body タグに設定しているように見える問題があります。

クリック イベントの内部は次のように再定義されます。

$("body").on("click", $expander, function(){...});
//instead of:
//$expander.click(function(){...});

私は左手代入のようなことをすることを考えていました:

$(this) = $expander;

しかし、ウェブサイトによると、左手の割り当ては機能しません。( http://hungred.com/how-to/tutorial-override-this-object-javascript/ )。彼らは私に非常に役立つ方向性を示してくれました。

function example(eventHandler){
  ALL MY CODE.
}
$("body").on("click", $expander, function(event){
  example.call($expander, event);
});

Does this look feasible, or should i be planning another route?
4

1 に答える 1

1

jQuery を使用.on()して、イベントの委譲を行うことができます。$add.click(function() { ... })あなたのコードは長すぎて読んだり編集したりできませんが、一言で言えば、イベントリスナーを親または本体にバインドするのではなく$("body").on("click", ".addNew", function() { ... })

于 2013-04-26T19:36:35.630 に答える