我有以下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
注册down
和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"]"
而非其他。
非常感谢。
答案 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();
});