我有一个按钮,当它被点击时,会显示一个带有图片的div(就像聊天中的表情面板)。如果我再次点击它,该div将隐藏。但是我想做的是:如果该div已经显示并且我点击页面上的任何其他元素,我想隐藏它。我尝试了以下代码:
$("myBtn").click(function(){
// show div
});
$(document).click(function(){
// hide div
});
当“myBtn”被点击时,div会自动显示并隐藏。我该怎么解决它?感谢您的时间。
我有一个按钮,当它被点击时,会显示一个带有图片的div(就像聊天中的表情面板)。如果我再次点击它,该div将隐藏。但是我想做的是:如果该div已经显示并且我点击页面上的任何其他元素,我想隐藏它。我尝试了以下代码:
$("myBtn").click(function(){
// show div
});
$(document).click(function(){
// hide div
});
你可以尝试以下方法:
$(document).on('click', function(evt) {
if(!$(evt.target).is('#my-id')) {
//Hide
}
});
更新
这样你就可以拥有完整的工作集:
$('#mybutton').on('click', function(evt) {
$('#mydiv').show();
return false;//Returning false prevents the event from continuing up the chain
});
.on
。 :) - Kyleclick
一直是bind("click")
的简化写法;on
方法替代了它们,并且包含了新的简单委托语法.on(event, childSelector, callback)
。 - Evan Davis<div>
的同时,向您的页面添加一个新的<div>
,并将其设置为以下样式/CSS:.ui-widget-overlay {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
z-index: 100;
}
<div>
(即您希望能够点击但不关闭的<div>
)具有更高的z-index
,而页面上的其他所有内容都具有较低的z-index
。<div>
添加到页面时,请为其添加.ui-widget-overlay
类,并添加一个点击处理程序以拦截该<div>
上的单击事件。添加具有单击处理程序的覆盖层div
看起来像这样:$('<div class="ui-widget-overlay">')
.click(function() {
$('.ui-widget-overlay').remove();
$('selector-for-original-div').hide();
})
.appendTo('body');
已更新
假设当元素显示时您给它一个名为“active”的类,那么代码应该是:
$('html').click(function(e){
if(!$(e.target).attr("id") == "my-id") {
}
});
'html'
,这并不是“错误”的,但是惯例是绑定到 document
。 - Chad<script type="text/javascript">
$('body').click(function() {
if($("div").is(':visible')){
$("div").hide();
}
});
</script>
这里的 $ ("div") 选择器应该是您具有 ID 或类的 div,例如:如果 <div class="class" id="id">
,那么 $("div")
将被更改为 $("div.class")
或 $("div#id")
$('div#id')
,因为这是过度指定,实际上会使Sizzle无法使用getElementById()
优化。 - Chad<div class="slControlWrapper">
<div class="slControlLabel">
<asp:Label ID="lblSL" CssClass="lblSL" runat="server">Clickable Label</asp:Label>
</div>
<div class="slControlSeparator">
</div>
<div class="slControlDropDown">
</div>
<div id="wndSL">
This is the hidden content of my DIV Window
</div>
<div id="test">
I am for test click on me
</div>
</div>
$('.slControlLabel, .slControlDropDown').bind('click',function(event){
$('#wndSL').show();
event.stopPropagation();
});
$('html').click(function() {
$('#wndSL').hide();
});
#wndSL {
display:none; background-color: blue; height:500px; width:590px;
}
请看这里:
wnd
是窗口的匈牙利命名法,但sl
代表什么? - John Dvoraksl
是指“服务器标签”?我仍然不理解其语义。 - John Dvorak