3

我有以下 HTML 标记。

<div id="toppanel">
    <div id="panel" style="display: none;">
        <div class="content clearfix">
            <div class="clear"></div>
            //some ul li
            <div class="left">
                <img alt="" src="img/slide_logo.png">
                <h1>Welcome</h1>
                <p class="grey">You can put request for anything you want : cooking, driver for a day, programmer... The only limit is your imagination!</p>                    
            </div>
            <div class="left">
                <h1>Member Login</h1>
                <form accept-charset="utf-8" action="/users/login" method="post" id="HeaderUserLoginForm" novalidate="novalidate">
                    //form fields
                    <input type="submit" style="float:left;position: relative;top: 10px;" class="button blue" value="Sign In" name="submit">
                    <a href="#" class="lost-pwd">Lost your password?</a>
                </form>
            </div>

            <div class="left right">
                <form accept-charset="utf-8" action="/users/signup" method="post" id="HeaderUserSignupForm" novalidate="novalidate">
                    //form fields
                    <input type="submit" style="float:left;position: relative;top: 10px;" class="button blue" value="Sign Up" name="submit">                            
                </form>
            </div>
        </div>
    </div>
</div>

上面的 HTML 代码用于顶部固定登录和注册,slideupdown使用toggle.

现在,当我click其他部分的用户DOCUMENT需要隐藏它时,我使用下面的代码来做到这一点。

$(document).on('click',function(e)
{
    e.stopPropagation();
    $("div#panel").slideUp("slow");
});

但问题是当我点击它的任何部分toppanel DOMslideUp

那么我该如何克服这个问题。我也尝试过:not(),但没有希望。

我最终的结果是。

$(document).on('click','#panel input[type!="submit"], #toppanel:not("div"), #toppanel:not("div ul"), #toppanel:not("div p")',function(e)
{
    e.stopPropagation();
    $("div#panel").slideUp("slow");
});

这只是为了"#panel input[type!="submit"]"不为其他人工作。

非常感谢。

4

3 回答 3

2
$(document).on('click',function(e)
{
     if(!$(e.target).is('#toppanel')){
       e.stopPropagation();
       $("div#panel").slideUp("slow");
    }

});

更新..(我认为这不是一个好方法..无论如何试一试)给所有元素一个你想排除点击事件的类

<div class="exclude">
   <p class="exclude"></p>
    <span class="exclude">fooo</span>
    etc....

</div>



 $(document).on('click',function(e)
    {
         if(!$(e.target).is('.exclude')){
           e.stopPropagation();
           $("div#panel").slideUp("slow");
        }

    });
于 2013-03-15T05:53:50.737 回答
1

以及 ubercooluk thanx 的帮助,这就是我最终得到的结果和它的工作原理。

$(document).on('click',function(e)
{
    if($(e.target).parents('#toppanel').length == 0 )
    {
        e.stopPropagation();
        $("#toggle a.close").hide();
        $("#toggle a.open").show();
        $("div#panel").slideUp("slow");
    }
});
于 2013-03-15T06:02:01.720 回答
0

这可能会有所帮助:

$('#panel').children().on('click', function(e){
    e.stopPropagation();
});
于 2013-03-15T06:03:44.307 回答