Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery遇到not()和下拉列表问题_Javascript_Jquery_Dom - Fatal编程技术网

Javascript jquery遇到not()和下拉列表问题

Javascript jquery遇到not()和下拉列表问题,javascript,jquery,dom,Javascript,Jquery,Dom,我有一个水平列表菜单,单击该菜单可切换嵌套列表的可见性。该功能几乎可以正常工作,我单击菜单并切换可见性。但是,当我在刚刚出现的元素中单击时,嵌套列表的可见性将恢复到原始状态并隐藏。当元素需要交互时,无论是表单还是其他菜单,这都有点困难 以下是我目前掌握的代码: /* menu */ var menu = function(clicktarget, dropdown){ $(clicktarget).click( function(event){ // stop bubb

我有一个水平列表菜单,单击该菜单可切换嵌套列表的可见性。该功能几乎可以正常工作,我单击菜单并切换可见性。但是,当我在刚刚出现的元素中单击时,嵌套列表的可见性将恢复到原始状态并隐藏。当元素需要交互时,无论是表单还是其他菜单,这都有点困难

以下是我目前掌握的代码:

/*  menu */
var menu = function(clicktarget, dropdown){
    $(clicktarget).click( function(event){
        // stop bubbling
        event.stopPropagation();
        //show
        $(dropdown).toggle();
        return false;
    });

    $('body').not($(dropdown)).click( function(){
        //hide when click anywhere out the menu
        $(dropdown).hide();
        return false;
    });
}
menu($('#loginAcc'),$('#auth-menu'));
正如您所看到的,我尝试使用.not函数来删除它,但没有任何变化,而且当单击下拉列表时,它仍然会被删除。

试试看

$('body').click( function(e){
    //hide when click anywhere out the menu
    var $target  = $(e.target)
    if(!$target.closest(dropdown).length){
        $(dropdown).hide();
    }
    return false;
});

你能提供你的JSFIDLE代码吗?仅供参考,dropdown和clicktarget的值已经是一个jQuery对象了,所以没有理由再次将其传递给jQuery。这与执行以下操作相同:$$'auth-menu'。隐藏相当奇怪的内容。$'body'。而不是$下拉菜单。单击。。。基本意思是:选择只有一个btw的所有主体元素,并删除所有等于下拉列表的元素,即具有ID auth菜单的所有元素。我假设body元素没有该ID,因此它不会从选择中删除。然后单击事件处理程序被绑定到body元素。这不是忽略源自特定元素的事件的正确方法。