Javascript 如何使用event.target获取外部div目标?

Javascript 如何使用event.target获取外部div目标?,javascript,jquery,html,Javascript,Jquery,Html,我正在使用javascript(和jQuery)创建web服务,并尝试创建自定义菜单。 但重点是“用户点击的小部件ID”。 我想返回小部件的id(如widget1或widget2), 即使用户按下了内部对象(img,textarea等) 我尝试了event.target.id,但它返回的是内部对象的id,而不是外部div。 我怎样才能解决这个问题 JavaScript和HTML: $(“#包装器_小部件”).bind(“上下文菜单”,函数(事件){ event.preventDefault()

我正在使用javascript(和jQuery)创建web服务,并尝试创建自定义菜单。
但重点是“用户点击的小部件ID”。
我想返回小部件的id(如
widget1
widget2
),
即使用户按下了内部对象(
img
textarea
等)
我尝试了
event.target.id
,但它返回的是内部对象的id,而不是外部div。
我怎样才能解决这个问题

JavaScript和HTML:

$(“#包装器_小部件”).bind(“上下文菜单”,函数(事件){
event.preventDefault();
警报(event.target.id);
});

喋喋不休
asdasdasd

您可以使用
.prop()
来获取直接祖先ID

$(event.target).closest('div').prop('id')
注意:只有在包装内部没有进一步嵌套
s
时,这才有效

$("#wrapper_widgets").bind("contextmenu", function (event) {
    event.preventDefault();
    alert($(event.target).closest('div').prop('id'));
});
$(“#包装器_小部件”).bind(“上下文菜单”,函数(事件){
event.preventDefault();
警报($(event.target).closest('div').prop('id'));
});

喋喋不休
asdasdasd


问题是event.target将引用事件起源的元素,因此您必须找到最近的祖先
小部件
元素

一个简单的解决方案是对所有小部件使用一个类并将其作为目标

<div id="wrapper_widgets">
    <div id="widget1" class="widget">
        <img src="blablabla.png">
        <textarea id="widget1_textarea">blablabla</textarea>
    </div>
    <div id="widget2" class="widget" style="border: 1px solid blue; width: 500px; height: 100px;">
        <p id="widget2_timedoc">asdasdasd</p>
    </div>
</div>


在事件函数中使用

$(this).parent().prop('id')

获取所单击元素的直接父级id。这将始终返回直接父级,不一定只返回div,但在您的情况下,它将工作并返回“widget1”或“widget2”。

事件.preventDefault()之前添加
事件.stopPropagation()
如果他有两个div,那么你指的是哪两个div?我只是问你是否看到了这个例子:如果我点击文本区域,那么最近的div会给我div id或div idies,我会看到你的便笺,但我尝试了这个例子,它会返回这个大写div id,但小div更接近大写div,所以我很困惑?你能给我解释一下方法吗?实际上,我的项目有可能在外部div中有另一个div,这取决于用户。第一个解决方案(用类名绑定)对我不起作用,但第二个也起作用。谢谢@MineSky try
$(“#包装器_widgets”)。在(“上下文菜单”、“.widget”、函数(事件){event.preventDefault();警报(this.id);})-如果元素是动态创建的,它也可以正常工作。我不知道在1.7之后有更好的方法
.on()
$("#wrapper_widgets").bind("contextmenu", function(event) {
    event.preventDefault();
    alert($(event.target).closest('.widget').attr('id'));
 });
$(this).parent().prop('id')