0

使用 jQuery,我将旧的 .live() 事件绑定替换为 .on(),如下所示:

$(document).on(event, selector, function () {
    console.log($(this)); //$(this) refers to the $(document) element, not the selector

});

我想要做的是访问正在应用此事件的元素。有任何想法吗?

这有效:

$(selector).on(event, function () {
    console.log($(this)); //$(this) refers to the selector
});

但它的工作方式与 live 不同 - 添加到文档中匹配选择器的新元素不会被绑定......

谢谢!

4

3 回答 3

0

根据文档,您的假设是不正确的:

$("body").on("click", "p", function(){
  alert( $(this).text() );
});

其中,我们被告知“每次单击时都会在警报框中显示每个段落的文本”。因此,this引用是对过滤选择器匹配的元素。

您可以通过设置一个示例来自行测试该nodeName对象this

$("body").on("click", "p", function(){
  alert( this.nodeName ); // p
});

演示:http: //jsbin.com/eseduf/edit#javascript,html

我注意到您正在使用一个变量作为您的过滤选择器 - 确保您为此变量设置了一个值。如果不这样做,您会发现主选择器将捕获事件,而不是过滤选择器:

var selector;
$("body").on("click", selector, function(){
  alert( this.nodeName ); // body
});
于 2012-04-27T14:01:05.770 回答
0

看看这个 jsFiddle... http://jsfiddle.net/nc9XD/1/

“on”方法将获取新元素......只要它们被添加到您将 on 事件绑定到的元素中。

另外..“this”将指的是在您的函数中单击的元素。

于 2012-04-27T14:07:49.410 回答
0

您可以添加事件将应用于的“选择器”。做一些像live这样的事情,这样做:

$(document).on("click", "a", function() { console.log($(this)); });

最好模拟 .delegate,并将范围缩小到包含元素:

$("#containingElement").on("click", "a", function() { console.log($(this)); });
于 2012-04-27T14:02:21.090 回答