基于this我试图通过写这个来将click事件处理程序添加到一个对象数组中:
function addEventHandler(array, type, func) {
var len = array.length;
for (var i = 0; i < len; i++) {
array[i].bind(type, func);
}
}
sections = $('#sponsorship > div .section')
addEventHandler(sections, 'click', function() {
console.log(this);
});
但是,我收到错误消息:
array[i].bind is not a function
我是否只能在绑定方法上使用实际选择器?有什么建议吗?
答案 0 :(得分:5)
您可能需要将元素转换为jQuery对象。
$(array[i]).bind
答案 1 :(得分:3)
试试这个
function addEventHandler(array, type, func) {
var len = array.length;
for (var i = 0; i < len; i++) {
array.eq(i).bind(type, func);
}
}
答案 2 :(得分:1)
您获得的错误消息正是您尝试在非jQuery对象上运行jQuery函数所获得的。您可以通过使用for循环的索引来轻松解决此问题,以访问array
变量中的jQuery对象:
function addEventHandler(array, type, func) {
var len = array.length;
for (var i = 0; i < len; i++) {
array.eq(i).bind(type, func);
}
}
sections = $('#sponsorship > div .section')
addEventHandler(sections, 'click', function() {
console.log(this);
});
将array[i].bind(type, func);
更改为array.eq(i).bind(type, func);
可以访问jQuery对象而不是常规JS对象,这将删除您所获得的错误。
以下是对您的代码进行上述更改的问题:http://jsfiddle.net/jfUpB/1/
答案 3 :(得分:0)
$('#sponsorship > div .section').click(function (event) {
console.log(event.target);
});
或
$('#sponsorship > div .section').each(function(index,item) {
$(item).click(function (event) {
console.log(event.target);
});
});
这有什么不对吗?
答案 4 :(得分:0)
我会用jQuery的$ .each函数替换for(int ...),因为你要处理数组的项而不是尝试按索引检索项。另外,要使用任何jQuery函数,数组中的对象应该是一个jQuery对象,所以我会这样做:
function addEventHandler(array, type, func) {
var len = array.length;
$(array).each(function(index, item) {
$(item).bind(type, func);
});
}
答案 5 :(得分:0)
.each()
表现很重,即使按照jQuery的标准也被视为“懒惰”。