我有一个浮动的div,当它被显示时,我希望在用户点击div以外的区域时将其隐藏。类似于.hover()函数在悬停在元素上时的回调,只不过我想使用点击事件。
我尝试在body上设置点击事件来隐藏div,但结果出乎意料。
有人有想法如何轻松实现这个功能吗?
我尝试在body上设置点击事件来隐藏div,但结果出乎意料。
有人有想法如何轻松实现这个功能吗?
如果你想在页面的其他地方点击时清除div,可以这样做:
$('body').click(function(event) {
if (!$(event.target).closest('#myDiv').length) {
$('#myDiv').hide();
};
});
另一个可能更简单的选择是在浮动 DIV 和页面其他部分之间添加一个透明的 div。
透明 DIV 上的简单点击事件可以处理隐藏,避免了您遇到的点击事件问题。
$("*:not(#myDiv)").live("click", function(){
$("#myDiv").hide();
});
你肯定想要找的是失焦(blur)事件吧?
$(".modal_div").live("blur", function(){$(this).hide();});
- ndorfin最好的方法是:
$(document).bind('click', function(e) {这段代码可以在点击页面时隐藏具有“divtohide”类的元素。
var $clicked = $(e.target);
if (!$clicked.parents().hasClass("divtohide")) { $(".divtohide").hide(); }
});
这对我起作用了,
var mouseOver = false;
$("#divToHide").mouseover(function(){mouseOver=true;});
$("#divToHide").mouseout(function(){mouseOver=false;});
$("body").click(function(){
if(mouseOver == false) {
$("#divToHide").hide();
}
});
例如,您单击链接元素以显示 div 菜单,只需将 blur 函数绑定到链接元素即可隐藏 div 菜单。
$('a#displaymenu').click(function(){
$("#divName").toggle();
}).blur(function() {$("#divName").hide()})
clickOut = function(selector, element) {
var hide = function(event) {
// Hide search options if clicked out
if (!$(event.originalEvent.target).parents(selector).size())
$(element).hide();
else
$(document).one("click",hide);
};
$(document).one("click", hide);
};
所以,如果您有一个弹出元素,例如<div class='popup'>test</div>
,您可以使用我的函数,如下所示:clickOut("div.popup", $("div.popup"));
$('body').click(function (event) {
if ($("#divID").is(':visible')) {
$('#divID').slideUp();
}
});
以下是一个完整的事件驱动方法:
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(function()
{
var $layer = $('#layer');
var $body = $('html');
$layer
.bind( 'summon', function( e )
{
$layer.show();
$body.bind( 'click', dismissLayer );
} )
.bind( 'dismiss', function( e )
{
$layer.hide();
$body.unbind( 'click', dismissLayer );
} )
.click( function( e )
{
e.stopPropagation();
})
.trigger( 'dismiss' )
;
function dismissLayer( e )
{
$layer.trigger( 'dismiss' );
}
// This is optional - this just triggers the div to 'visible'
$('#control').click( function( e )
{
var $layer = $('#layer:hidden');
if ( $layer.length )
{
$layer.trigger( 'summon' );
e.stopPropagation();
}
} );
});
</script>
<style type="text/css">
#layer {
position: absolute;
left: 100px;
top: 20px;
background-color: red;
padding: 10px;
color: white;
}
#control {
cursor: pointer;
}
</style>
</head>
<body>
<div id="layer">test</div>
<span id="control">Show div</span>
</body>
</html>
我知道这是很多代码,但这里仅展示一种不同的方法。