Javascript 检测单击是否不是某些特定的div

Javascript 检测单击是否不是某些特定的div,javascript,jquery,mouseevent,dom-events,unobtrusive-javascript,Javascript,Jquery,Mouseevent,Dom Events,Unobtrusive Javascript,我正在开发一种水平菜单,但单击时可见,单击时隐藏,但当单击位于某个箭头上时可见,而当单击位于文档上时隐藏,但不在某个div容器上。在该div容器中还有一些其他元素。如果我们编写document.onclick=closingfunction,那么无论用户是否单击该div本身,它都会关闭。我想在用户单击任意位置时调用closefunction,但不在该div本身或箭头上 似乎会有它的解决方案,但我还没有找到,所以这就是为什么在这里发布它。使用Prototype,您可以做类似的事情 docu

我正在开发一种水平菜单,但单击时可见,单击时隐藏,但当单击位于某个箭头上时可见,而当单击位于文档上时隐藏,但不在某个div容器上。在该div容器中还有一些其他元素。如果我们编写
document.onclick=closingfunction
,那么无论用户是否单击该div本身,它都会关闭。我想在用户单击任意位置时调用
closefunction
,但不在该div本身或箭头上


似乎会有它的解决方案,但我还没有找到,所以这就是为什么在这里发布它。

使用Prototype,您可以做类似的事情

    document.observe('click', function(ev) {
        var el = Event.element(ev);
        if ((el !== $('thediv'))
                && !el.descendantOf(thediv)) {
            // hide div here
        }
    });

您可以使用jQuery的closest()查看单击是否在菜单中:

可以使用jQuery is()函数检测当前目标是否与特定选择器匹配:

$('ul.container li').click(function(e){
    if ($(e.target).is('.dropdown')) {
        //do something when clicked inside dropdown
    }
})

哈哈,甚至没有看到标签,读了问题,看到了文档。onclick=。。。虽然OP没有使用框架,但看到了一个漏洞;)不用担心,它也给了我一个想法,虽然jquery显然对我更有用,但如果可以尽量减少无用事件的数量,它最好更具体一些。
$('ul.container li').click(function(e){
    if ($(e.target).is('.dropdown')) {
        //do something when clicked inside dropdown
    }
})