我正在尝试使面板在单击按钮时打开。我有按钮,我有面板。对于click()
事件,它会打开。再次按下该按钮时,它会关闭。
$('#button').click(function() {
$('#panel').toggle();
});
如果用户点击#button
或#panel
以外的任何地方,我希望实现这一点,它也会关闭。
P.S。我试过这样的事情,但这不是想要的行为。
$('#button').mouseenter(function() {
$('#panel').show();
}).mouseleave(function() {
setTimeout(function() {
$('#panel').hide();
}, 2000);
});
答案 0 :(得分:4)
$(
function(){
$("#button").click( function(){ $("#panel").toggle(); } );
$(document).click( function(e){
var elm = jQuery(e.target);
if(elm.is("#button") || elm.is("#panel") || elm.parents("#panel").length>0)return;
$("#panel").hide();
});
}
);
检查以确保点击[e.target
]的元素不是
elm.is("#button")
elm.is("#panel")
elm.parents("#panel").length>0
答案 1 :(得分:3)
试试这个
$('#button').click(function(e) {
$('#panel').toggle();
e.stopPropagation();
});
$('#panel').click(function(e) {
e.stopPropagation();
});
$(document.body).click(function(e) {
if($('#panel').is(":visible")){
$('#panel').hide();
}
});
答案 2 :(得分:1)
直接回答您的请求
$('body').click(function(e)
var starter = $(e.target);
if ( starter.is('#button, #panel') || starter.closest('#panel').length > 0 ) return;
setTimeout(function() {
$('#panel').hide();
}, 2000);
})
但是看看你试图用mouseout做什么,你可能会认为这是一个更好的方法
$('#button').click(function() {
$('#panel').show();
});
$('#panel').mousenter(function() {
var closetimer = $(this).data('closetimer'); // retrieve the timer if it exists
clearTimeout(closetimer); // and clear the timeout when we re-enter to cancel the closing
}).mouseleave(function() {
var closetimer = setTimeout(function() {
$('#panel').hide();
}, 2000);
$(this).data('closetimer', closetimer); // store the timer with the panel so we can cancel it if we need
});
答案 3 :(得分:0)
在面板后面放置一个不可见元素,占据屏幕(或页面)的100%。该元素将被赋予click事件,该事件将自己关闭任何面板。
这也可以防止点击关闭面板,从而触发网站其余部分的任何其他操作。
如果您愿意,还可以将分层元素设置为灰色和半透明,这样可以在显示面板时显示重影网站的其余部分。 Javascript弹出框脚本经常使用这种效果,你可以免费虚拟地使用它,因为你已经放置了全屏元素;你只需要设计风格。