一連のデータのビューアーを作成するフィドルがあります。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?