我的页面上有一个元素,可以通过单击文本链接来切换显示和隐藏。我还需要在用户单击页面元素以外的任何位置时隐藏该元素,以下是我的jQuery代码-请问有人能帮我修改一下这个代码吗?
$(function() {
$("#header-translate ul li").click(function() {
$("#header-translate li ul").toggle("slide", { direction: "up" }, 500);
});
});
我的页面上有一个元素,可以通过单击文本链接来切换显示和隐藏。我还需要在用户单击页面元素以外的任何位置时隐藏该元素,以下是我的jQuery代码-请问有人能帮我修改一下这个代码吗?
$(function() {
$("#header-translate ul li").click(function() {
$("#header-translate li ul").toggle("slide", { direction: "up" }, 500);
});
});
one
函数非常适合这种情况。$(function() {
$("#header-translate ul li").click(function(e) {
e.preventDefault();
var $toClose = $("#header-translate li ul")
$toClose.slideToggle(500, function() {
if($toClose.is(':visible')) {
$('body').one('click', function(e) {
e.preventDefault();
$toClose.slideUp(500);
});
}
else {
$('body').unbind('click');
}
});
});
});
我相信你需要为 $('body')
添加一个 click()
处理程序,并且还需要在你的元素上添加 event.stopPropagation()
。
$(function() {
$("#header-translate ul li").click(function(e) { // don't forget that 'e'
$("#header-translate li ul").toggle("slide", { direction: "up" }, 500);
e.stopPropagation(); // so this doesn't register as a body click
});
$("body").click(function(e) {
$("#header-translate").hide();
});
});
one
轻松实现。请参见下面的答案。 :) - Adam Terlsonshow()
出来。如果不是这样,你的方法肯定更好。 - Blazemonger你需要检查是否
$(function()
{
var elToHideSelector = "#header-translate li ul";
$("body").click(function(e)
{
if ( ! $(e.target).is(elToHideSelector + ',' + elToHideSelector + ' *') )
{
$(elToHideSelector).hide();
}
});
});
$(function() {
$("#header-translate ul li").click(function(e) {
$("#header-translate li ul").toggle("slide", { direction: "up" }, 500);
e.stopPropagation(); // so this doesn't register as a body click
});
$("body").click(function(e) {
if ($('#header-translate li ul').is(':visible')) { $("#header-translate li ul").hide("slide", { direction: "up" }, 500);}
});
});
您可以向文档添加监听器(由于事件会冒泡,因此您可以在父元素中捕获它)
$(function() {
$("#header-translate ul li").click(function() {
$("#header-translate li ul").toggle("slide", { direction: "up" }, 500);
$(document).one('click', function(){
$("#header-translate li ul").hide();
});
});
});