为什么这不起作用 - 使用:not()与事件处理程序

时间:2012-06-05 22:19:30

标签: javascript jquery

我似乎有另一个问题,我不是在征服。真正简单的前提。 我有一个mousedown事件,基本上如果点击页面上的一个特定元素,我不想发生任何事情,否则我想隐藏()一些div。

    $(function(){
        $("document :not(#_ignorelement)").mousedown(function(event){
                if($('#_hidethiselement').length){
                    $('#_hidethiselement').hide();
                }
        })
     })

这根本不起作用。我也尝试了以下内容:

    $(document).not($("#_ignorelement")).mousedown(function(event){

    $(document).not("_ignorelement").mousedown(function(event){

如果我能解决这个问题,好奇我将如何实际拥有“:not”包含父div,如下所示:

$().not("_ignoreelement").parent().closest('div').mousedown(function

因为元素“_ignorelement”是div中的锚标记。想知道如何使用父div而不是锚标签。

无论如何,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

document不是您可以选择的节点。试试这个:

$(function(){
    $("body :not(#_ignorelement)").mousedown(function(event){
        if($('#_hidethiselement').length){
            $('#_hidethiselement').hide();
        }
        return false;
    })
 });

这里是working example

答案 1 :(得分:1)

这应该有效:

var ignoreNode = jQuery('#_ignorelement')[0];

jQuery(document).on('mousedown', function(e) {
  if (ignoreNode === e.target || jQuery.contains(ignoreNode, e.target)) {
    // If the target is, or is inside the ignoreNode, don't
    // do anything.
    return;
  }

  // Do your hiding handling here 
});

请注意,缓存jQuery对象确实是一个好主意,这样您就不会在每个事件上运行选择器查询!