我在使用jQuery很长一段时间后第一次使用Closure。
我在为getElementsByClass()获取的多个对象创建侦听器时遇到问题。知道如何在关闭时做到这一点吗?
goog.events.listen(
goog.dom.getElementsByClass('clone'),
goog.events.EventType.CLICK,
function(e) {
alert('hi');
}
);
上述代码出现以下错误:
未捕获的TypeError:对象#没有方法'attachEvent'
编辑:我通过以下代码完成了这项工作。但是,我不太确定,如果这是最有效的方式:
var clone_buttons = goog.dom.getElementsByClass('clone');
for (var i = 0; i < clone_buttons.length; i++) {
goog.events.listen(
clone_buttons[i],
goog.events.EventType.CLICK,
function(e) {
alert('hi');
}
);
}
答案 0 :(得分:0)
您未在所提供的代码中的任何位置使用闭包。如果您想要最有效的代码,那么您应该将常用属性存储在局部变量中:
var clone_buttons = goog.dom.getElementsByClass('clone');
var length = clone_buttons.length;
var events = goog.events;
var CLICK = events.EventType.CLICK;
for (var i = 0; i < length; i++) {
events.listen(
clone_buttons[i],
CLICK,
function(e) {
alert('hi');
}
);
}
您可以在此处详细了解闭包:https://stackoverflow.com/a/12931785/783743
您可以在此处阅读有关提升效果的提示:http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas