我正在考虑这种情况,如何知道用户点击DIV的位置。
<div class="abc">
<a href="#" class="def">xxx</a>
</div>
$("div.abc").live('click', function(e) {
alert('message');
})
如果我将使用这部分代码,那么如果我点击 DIV.ABC 中的某个地方,那么我将收到警告消息消息。这没关系。 但是我只需要在用户点击 DIV.ABC ,不在元素上,即DIV.ABC 。有可能吗?
提前致谢;)
修改 对不起伙计们,我向你道歉。当然,我的剧本中的每个地方都是较低的字母。我的问题是,当我点击div.abc中的锚点时,如何忽略警告('消息')
答案 0 :(得分:3)
e.target.tagName.toLowerCase()
将为您提供该事件原始来源的元素类型。在您的情况下,您可以检查它是否为div
而不是a
。
答案 1 :(得分:1)
尝试 -
$("div.abc").live('click', function(e) {
if (e.target.nodeName.toLowerCase() != 'a')
alert('message');
})
答案 2 :(得分:0)
stopPropogation()
方法可以阻止事件冒泡树。但要注意,它还会阻止附加到这些元素的其他事件处理程序执行,如果它们打算在此之后执行。
$("div.abc").live('click', function(e) {
alert('message');
})
$("div.abc>*").live('click', function (e) {
e.stopPropogation();
});
答案 3 :(得分:0)
我认为当你引用jquery选择你的div abc时,由于“a”部分,它会以某种方式关注锚标记。尝试重命名你的div并将其反映到你的jquery中。看看是否有帮助。
答案 4 :(得分:0)
您的示例中不需要live
方法,因此可以执行以下操作。
$("div.abc").click(function(e) { alert('message'); } ).children().click(function(e) {
e.preventDefault();
e.stopPropogation();
alert('message');
});
e.stopPropogation将阻止任何事件冒泡树。
答案 5 :(得分:0)
使用.stopPropagation()
。
$('div.abc').click('live', function() {
// this does what you want
alert('message');
});
$('div.abc *').click('live', function(e) {
// but we don't want that to happen
// when we click on anything else inside
e.stopPropagation();
});