jQuery委托 - 在事件关闭中查找委托对象

时间:2011-09-16 14:17:34

标签: jquery delegates

如何在委托事件处理程序中访问委托对象?希望一个例子可以澄清我模糊的问题。

$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的方法是什么?

感谢您的帮助。

3 个答案:

答案 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