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 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"]"ます。

本当にありがとう。

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は助けてくれてありがとうこれは私が最終的に得たものであり、その働きです。

$(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 に答える