我有一个小提琴,它为一组数据创建了一个查看器。如果您正在查看 javascript,它将查看 3 行,如果您搜索SEARCH_HERE
$("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()函数中。
如果您只取消注释第二行,它只会显示维护者项目。添加项目 [+]时,您将显示表单,但事件将不存在。
我在想,由于 $_table 已从页面中删除,因此事件不再存在。第 3 行几乎将 $_table 重新附加到文档中,并且事件不存在。
这应该是这样的吗?我是否应该只创建一个在addBlock()内部执行的包装函数以相应地附加所有处理程序?
这很奇怪。
编辑:
一个答案指向委托事件,这似乎可以工作。虽然似乎将 $(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?