我有一个数据网页,其中可能只有几千个TD。一些TD将需要使用TD的内容或部分内容的绑定onclick事件。
我正在使用jQuery添加onclick闭包,如下所示:
$(".date").click(function() {
var d = this.html();
doSomething(this, d, otherparams);
}
效率这么高吗?似乎我的页面将包含几百个或几千个几乎相同的闭包。将doSomething
电话放在其他地方会不会更好。
答案 0 :(得分:7)
事实上,这非常效率低下。更重要的是,您可以使用事件委派轻松解决问题。这样做,将只使用一个事件处理程序方法而不是“数千”。
$('table').delegate('td.date', 'click', function( event ) {
var d = $(this).html();
doSomething(this, d, otherparams);
});
您只需要调用此构造一次(在任何循环之外)。它会将click事件处理程序绑定到上面示例中的所有表(例如,您应该更精确地使用id)。由于大多数浏览器事件都会“冒充”DOM树,因此<td>
元素中发生的任何点击最终都会到达<table>
并在那里进行处理。
参考:.delegate()