0

我正在使用 jQuery 将事件处理程序分配给 div 中的大量元素。当我在单个元素上使用 jQuery 'native'on或方法时,一切正常。click但是,当我尝试在循环中执行此操作时,什么也没有发生。

我有以下代码不起作用:

$tags = $("#some_div p");
var len = $tags.length;
for(var i = 0; i < len; i++)
{
    $tags[i].on('click', function(){ alert("hi"); });
}

并且这个代码确实有效:

$tags = $("#some_div p");
var len = $tags.length;
for(var i = 0; i < len; i++)
{
    $tags[i].onclick = function() { alert("hello"); };
}

onclick(function()...)在第一种情况下我也尝试过,我也尝试过,$.forEach但行为总是一样的。我在这里创建了一个 JS 小提琴:http: //jsfiddle.net/fM2ar/

我对 jQuery 没有太多经验,但我对文档的阅读是第一种方法应该可以工作——任何帮助都将不胜感激。

4

2 回答 2

2

$tags[i]给你一个 DOMElement,而不是一个 jQuery 对象。onclick是一个 DOM 属性,这就是它起作用的原因。on()是一个 jQuery 方法,这就是它不起作用的原因。

只需将 DOMElement 包装在 jQuery 对象中即可使用该on()方法;

$($tags[i]).on('click', function(){ alert("hi"); });

或者,您可以使用eq(i)方法,它返回位置的元素i,包装在一个 jQuery 对象中;

$tags.eq(i).on('click', function(){ alert("hi"); });
于 2013-05-26T14:57:41.560 回答
1

绝对不需要for循环:

$("#some_div p").on('click', function() {
    alert( this.innerHTML );
});
于 2013-05-26T15:10:28.123 回答