JavaScript使用数百个闭包或一个函数调用

时间:2011-06-30 08:08:24

标签: javascript jquery html

我有一个数据网页,其中可能只有几千个TD。一些TD将需要使用TD的内容或部分内容的绑定onclick事件。

我正在使用jQuery添加onclick闭包,如下所示:

$(".date").click(function() {
    var d = this.html();
    doSomething(this, d, otherparams);
}

效率这么高吗?似乎我的页面将包含几百个或几千个几乎相同的闭包。将doSomething电话放在其他地方会不会更好。

1 个答案:

答案 0 :(得分:7)

事实上,这非常效率低下。更重要的是,您可以使用事件委派轻松解决问题。这样做,将只使用一个事件处理程序方法而不是“数千”。

$('table').delegate('td.date', 'click', function( event ) {
    var d = $(this).html();
    doSomething(this, d, otherparams);
});

您只需要调用此构造一次(在任何循环之外)。它会将click事件处理程序绑定到上面示例中的所有表(例如,您应该更精确地使用id)。由于大多数浏览器事件都会“冒充”DOM树,因此<td>元素中发生的任何点击最终都会到达<table>并在那里进行处理。

参考:.delegate()