如何检查用户点击DIV的位置?

时间:2011-10-04 10:21:13

标签: jquery events live

我正在考虑这种情况,如何知道用户点击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中的锚点时,如何忽略警告('消息')

6 个答案:

答案 0 :(得分:3)

e.target.tagName.toLowerCase()将为您提供该事件原始来源的元素类型。在您的情况下,您可以检查它是否为div而不是a

答案 1 :(得分:1)

尝试 -

$("div.abc").live('click', function(e) {
  if (e.target.nodeName.toLowerCase() != 'a')  
  alert('message');
})

演示 - http://jsfiddle.net/ipr101/RJHDy/

答案 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();
});