0

我有这个 html 代码:

<div id="main-link-1" class="menu-option">
  <div id="icon" class="menu-icon"></div>
  <div class="menu-text"> Overview </div>
  <div class="separator"></div>
</div>

我只想将 jquery 点击事件添加到父 .menu-option 并获取 id "#main-link-1" :

$('.menu-option').click($.proxy(this.navigatorLink,this));

和 navigatorLink 功能:

navigatorLink : function(event){
    if(event.preventDefault) 
        event.preventDefault();
    else 
        event.returnValue = false;


    var link = event.target;

    var linkId = $(link).attr('id');
}

linkId 应该始终是父 ID:“main-link-1”

但是当我点击孩子时,我得到了孩子的身份证。单击悬停子项时,如何仅获取 parent_id 事件?

我知道这应该很容易,但是如果不更改html,我就找不到方法,在此先感谢!

4

1 回答 1

2

感谢您在问题中发布实际代码。这使得它更容易回答。

直接的问题是,通过使用代理,您会忘记默认this参数,而这正是您需要使用它来查看正在接收调用的元素。在 using 中event.target,您将获得被点击的确切元素,而不是捕获事件传播的元素。(请参阅http://javascript.info/tutorial/bubbling-and-capturing#this-and-event-targetthis以获得和之间的区别的一个很好的视觉示例event.target。)

我想问题是:你为什么要使用proxy?这似乎没有必要,因为您从未this在函数内部使用过。除非您的代码有更多内容,否则我会执行以下操作:

$('.menu-option').click(this.navigatorLink);


navigatorLink : function(event){
    if(event.preventDefault) 
        event.preventDefault();
    else 
        event.returnValue = false;

    var linkId = $(this).attr('id');
}

如果您确实有使用 的代码this,因此您无法以这种方式进行更改,您可以保留旧代码并使用closest

navigatorLink : function(event){
    if(event.preventDefault) 
        event.preventDefault();
    else 
        event.returnValue = false;

    var link = event.target;

    var linkId = $(link).closest(".menu-option").attr('id');
}
于 2013-10-24T16:48:22.043 回答