2010-02-15 77 views
15

我有这样的HTML页面的jQuery:让鼠标点击,如果一个div内或不

<html> 
<body> 
<div>a</div> 
<div>b</div> 
<div>c</div> 
<div>d</div> 
<div id='in_or_out'>e</div> 
<div>f</div> 
</body> 
</html> 

A,B,C,d,e和f可能是div的也不仅仅是一个纯文本。

我想获得鼠标点击事件,但我怎么知道它是否在内部或外部#in_or_out div?

编辑::大家好,我知道如何检查,如果DIV是点击或没有,但我想被开除我的事件时,点击是DIV

+0

我不认为有一种方法来否定选择器,如:'给我所有的div在id不同于xy'的地方。您需要点燃事件,然后处理功能中的排除。 – harpax 2010-02-15 11:14:57

回答

24
$("body > div").click(function() { 
    if ($(this).attr("id") == "in_or_out") { 
     // inside 
    } else { 
     // not inside 
    } 
}); 

编辑:刚刚得知,有一个否定:

$("body > div:not(#in_or_out)").click(function(e) { 
    // not inside 
}); 
+4

+1仅用于绑定div元素。 – karim79 2010-02-15 10:47:42

3

为境内关外这将是

$("#in_or_out").click(function() { 
    // do something here 
}); 

外面...我不知道。

编辑:您可以尝试为body-tag(为文档本身分配点击处理程序)执行相同的操作。但我不确定这两个事件是否会由此引发。

+0

这应该是一个解决方案。 – 2011-09-30 18:06:22

4

取决于你想要的。如果你只是要执行的代码,当它是#in_or_out,你可以这样做:

$('#in_or_out').click(function(){ /* your code here */ }); 

你可以有一个状态变量,表示鼠标是否#in_or_out与否:

var inside = false; 

$('#in_or_out').hover(function() { inside = true; }, function() { inside = false; }); 

然后,无论何时发生点击,您都可以使用inside查看点击是否在in_or_out之内。

参考:.hover()

更新:

不管你绑定click处理哪个元素,你总是可以做到这一点:

$('element').click(function() { 
    if ($(this).attr('id') !== 'in_or_not') { 

    } 
}); 
+0

只记得'in'是javascript中的一个关键字,不允许作为变量名称;-) – 2010-02-15 10:48:05

+0

@Ande E:是的,我注意到了,我改变了它;)谢谢:) – 2010-02-15 10:50:37

1

喜欢这个?

$("#in_or_out").click(function() { 
    alert("IN DIV!"); 
}); 
9

如果要检测你是否曾经点击内部或外部的股利,将事件处理程序在documentElement,让它从向上其他元素传播:

$("html").click(function (e) 
{ 
    if (e.target == document.getElementById("in_or_out")) 
     alert("In"); 
    else 
     alert("Out!"); 
}); 
+3

+1 for'e.target' – karim79 2010-02-15 10:47:23

+0

谢谢,先生! – 2010-02-15 10:49:23

+0

如果div(#in_or_out)包含其他元素并且用户单击内部元素,则这将不起作用。检查这个例子https://jsfiddle.net/opd3ktdf/4/ – Avi 2017-05-08 10:07:08

7

也许这也将有助于

$('body').click(function(){ 
    //do smth 
}); 
$('div#in_or_out').click(function(e){ 
    e.stopPropagation(); 
    // do smth else 
});