jquery为数组中的对象添加事件处理程序

时间:2011-11-25 18:53:11

标签: jquery event-handling

基于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

我是否只能在绑定方法上使用实际选择器?有什么建议吗?

6 个答案:

答案 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的标准也被视为“懒惰”。