0

我有一个小提琴,它为一组数据创建了一个查看器。如果您正在查看 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?
4

1 回答 1

1

您可以使用 jQuery.on()进行一些事件委托。您的代码太长,我无法阅读和编辑,但简而言之,而不是让$add.click(function() { ... })您将事件侦听器绑定到父级或主体$("body").on("click", ".addNew", function() { ... })

于 2013-04-26T19:36:35.630 回答