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

发布于 2024-12-05 11:28:40 字数 377 浏览 0 评论 0原文

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

$parent.delegate('a.some_class', 'click', someHandler);

function someHandler(e) {
  //how do I find $parent here?
}

这部分取决于我如何构建特定的 .js 文件,其中声明与实现是分开的(是的,我知道的 old skool )。

在 someHandler 中,e.target 和 $(this) 引用 a.some_class 对象。 e 是否也有对 $parent 的引用?如果没有,推荐的查找 $parent 的方法是什么?

感谢您的任何帮助。

How can I access a delegated object inside a delegate event handler? Hopefully an example should clarify my vague question.

$parent.delegate('a.some_class', 'click', someHandler);

function someHandler(e) {
  //how do I find $parent here?
}

This is partly down to how I've structured my particular .js file, where declarations are separate from implementation (yeah, old skool I know).

In someHandler, e.target and $(this) refer to the a.some_class object. Does e also have a reference to $parent? If not, what is the recommended way of finding the $parent?

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

可遇━不可求 2024-12-12 11:28:40

更新一种获取原始元素的方法 - e.originalEvent.currentTarget

$parent.delegate('a.some_class', 'click', someHandler);

function someHandler(e) {
  var originalParent = $(e.originalEvent.currentTarget);
}

DEMOhttp://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');
}

UPDATE: There is a way to grab the original element - e.originalEvent.currentTarget:

$parent.delegate('a.some_class', 'click', someHandler);

function someHandler(e) {
  var originalParent = $(e.originalEvent.currentTarget);
}

DEMO: http://jsfiddle.net/pjHQ6/


Original answer:

I'd probably do it like this:

$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');
}
软的没边 2024-12-12 11:28:40

愚蠢的我。应该更好地阅读 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 )

希望这对某人有帮助。

Stupid me. Should have read the jQuery docs better.

This should do it:

$parent.delegate('a.some_class', 'click', $parent, someHandler);

function someHandler(e) {
  var parent = e.data;
}

e.data (in SomeHandler) always points to eventData, if using this delegate call.

.delegate( selector, eventType, eventData, handler )

Hope this helps someone.

诺曦 2024-12-12 11:28:40

延斯·罗兰是正确的。
要添加的是,e.currentTarget 应该为您提供实际处理事件的 $parent。
有一个错误可以解释为什么 currentTarget 没有按预期方式工作
http://bugs.jquery.com/ticket/11756

Jens Roland is correct.
To add, the e.currentTarget should have given you the $parent where the event is actually handled.
There's a bug that explains why currentTarget is not working the way it's supposed to
http://bugs.jquery.com/ticket/11756

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文