我有这个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 click事件添加到父.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, 提前致谢!
答案 0 :(得分:1)
感谢您在问题中发布实际代码。这使得回答起来容易得多。
当前的问题是,通过使用代理,您将失去对默认this
参数的跟踪,这就是您需要用来查看正在接听电话的元素。在使用event.target
时,您将获得单击的确切元素,而不是捕获事件传播的元素。 (有关this
和event.target
之间区别的一个很好的直观示例,请参阅http://javascript.info/tutorial/bubbling-and-capturing#this-and-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');
}