使用jQuery,我用.on()替换旧的.live()事件绑定,如下所示:
$(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不同 - 添加到匹配选择器的文档中的新元素不会被绑定...
谢谢!
答案 0 :(得分: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
});
答案 1 :(得分:0)
您可以添加事件将应用于的“选择器”。做像活的事,做到这一点:
$(document).on("click", "a", function() { console.log($(this)); });
最好是模拟.delegate,并将范围缩小到包含元素:
$("#containingElement").on("click", "a", function() { console.log($(this)); });
答案 2 :(得分:0)
查看此jsFiddle ... http://jsfiddle.net/nc9XD/1/
“on”方法将获取新元素...只要它们被添加到您将on事件绑定到的元素。
此外..“this”将引用您在函数中单击的元素。