jQuery点击事件中的麻烦

时间:2013-03-15 05:50:47

标签: php jquery slidedown

我有以下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代码适用于顶级固定登录,并使用slideup注册downtoggle

现在当用户clickDOCUMENT的其他部分时,我需要隐藏此内容,并使用下面的代码进行操作。

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

但问题是,当我点击toppanel DOM的任何部分时,它也会slideUp

那我怎么能克服这个问题呢。我也试过: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"]"而非其他。

非常感谢。

3 个答案:

答案 0 :(得分:2)

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

});

更新..(我认为不是很好的方式..一定要试一试) 为所有元素提供要排除click事件的类

<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");
        }

    });

答案 1 :(得分: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");
    }
});

答案 2 :(得分:0)

可能会有所帮助:

$('#panel').children().on('click', function(e){
    e.stopPropagation();
});