如何在委托事件处理程序中访问委托对象?希望一个例子可以澄清我模糊的问题。
$parent.delegate('a.some_class', 'click', someHandler);
function someHandler(e) {
//how do I find $parent here?
}
这部分取决于我如何构建我的特定.js文件,其中声明与实现是分开的(是的,我知道的旧skool)。
在someHandler中,e.target和$(this)引用a.some_class对象。 e是否也引用了$ parent?如果没有,建议找到$ parent的方法是什么?
感谢您的帮助。
答案 0 :(得分:4)
更新: 是一种获取原始元素的方法 - e.originalEvent.currentTarget
:
$parent.delegate('a.some_class', 'click', someHandler);
function someHandler(e) {
var originalParent = $(e.originalEvent.currentTarget);
}
DEMO :http://jsfiddle.net/pjHQ6/
原始答案:
我可能会这样做:
$parent.delegate('a.some_class', 'click', someHandler);
function someHandler(e) {
var parent = $(this).parent();
// Or if $parent isn't the immediate ancestor of the links:
var parent = $(this).closest('.parentClass');
}
答案 1 :(得分:2)
愚蠢的我。应该更好地阅读jQuery文档。
这应该这样做:
$parent.delegate('a.some_class', 'click', $parent, someHandler);
function someHandler(e) {
var parent = e.data;
}
如果使用此委托调用,e.data(在SomeHandler中)始终指向eventData。
.delegate( selector, eventType, eventData, handler )
希望这有助于某人。
答案 2 :(得分:1)
Jens Roland是对的。 要添加,e.currentTarget应该为您提供实际处理事件的$ parent。 有一个错误可以解释为什么currentTarget没有按照预期的方式工作 http://bugs.jquery.com/ticket/11756