Aftering.toggle()用户在jQuery中使用.mouseleave()后单击两次
当用户切换Aftering.toggle()用户在jQuery中使用.mouseleave()后单击两次,jquery,return,toggle,mouseleave,Jquery,Return,Toggle,Mouseleave,当用户切换$('#菜单')按钮,它们没有问题。但是,当用户鼠标移动$(“#下拉菜单”)时然后单击返回$(“#菜单”)他们必须单击两次才能使切换再次工作。我做错什么了吗 =============HTML=========== <a class="" href="javascript:;" id="menu"></a> <div style="display: none;" id="dropdown"> <div id="wrap">
$('#菜单')代码>按钮,它们没有问题。但是,当用户鼠标移动$(“#下拉菜单”)时代码>然后单击返回$(“#菜单”)代码>他们必须单击两次才能使切换再次工作。我做错什么了吗
=============HTML===========
<a class="" href="javascript:;" id="menu"></a>
<div style="display: none;" id="dropdown">
<div id="wrap">
<div class="menu-section">
<div class="menu-header-section">
<h3>Header</h3>
</div>
<div class="menu-list">
<ul class="list">
<li><a href="#">link</a></li>
<li><a href="#">link</a></li>
</ul>
</div>
</div>
</div>
<a href="javascript:;" class="closeThis">close</a> </div>
</div>
//menu
var menu = $('#menu');
var dropdown = $('#dropdown');
menu.toggle(function () {
menu.addClass('active');
dropdown.fadeIn();
}, function () {
menu.removeClass('active');
dropdown.fadeOut();
return false;
});
dropdown.mouseleave(function () {
menu.removeClass('active');
dropdown.fadeOut();
return menu;
});
从逻辑上讲
首先单击菜单
,出现下拉列表
。您可以将鼠标移动到下拉列表中(它会消失)
现在,当您第二次单击菜单时,它将执行.toggle()
函数的“第二部分”(即.fadeOut()
下拉列表
)
之后,当您再次单击菜单时,它将执行.toggle()
的“前半部分”,一切看起来都很愉快
编辑
您可以尝试使用标志
的概念
var menu = $('#menu');
var dropdown = $('#dropdown');
var flag = 'reset';
menu.click(function () {
if(flag == 'reset')
{
menu.addClass('active');
dropdown.fadeIn();
flag = 'set';
}
else if(flag =='set')
{
flag = 'reset';
menu.removeClass('active');
dropdown.fadeOut();
return false;
}
});
dropdown.mouseleave(function () {
flag = 'reset';
menu.removeClass('active');
dropdown.fadeOut();
return menu;
});
jsIDLE:逻辑上
首先单击菜单
,出现下拉列表
。您可以将鼠标移动到下拉列表中(它会消失)
现在,当您第二次单击菜单时,它将执行.toggle()
函数的“第二部分”(即.fadeOut()
下拉列表
)
之后,当您再次单击菜单时,它将执行.toggle()
的“前半部分”,一切看起来都很愉快
编辑
您可以尝试使用标志
的概念
var menu = $('#menu');
var dropdown = $('#dropdown');
var flag = 'reset';
menu.click(function () {
if(flag == 'reset')
{
menu.addClass('active');
dropdown.fadeIn();
flag = 'set';
}
else if(flag =='set')
{
flag = 'reset';
menu.removeClass('active');
dropdown.fadeOut();
return false;
}
});
dropdown.mouseleave(function () {
flag = 'reset';
menu.removeClass('active');
dropdown.fadeOut();
return menu;
});
jshiddle:解释一切:
.toggle(处理程序(eventObject),处理程序(eventObject)[,处理程序(eventObject)])
handler(eventObject)每次单击元素时都要执行的函数。
处理程序(eventObject)每次单击元素时执行的函数
.toggle()方法为click事件绑定了一个处理程序,因此触发click的规则也适用于此处
换句话说,toggle()
根据偶数和奇数单击事件进行交替。因此:
- 单击[奇数]:显示
- 单击[偶数]:隐藏
- 单击1:显示
- 单击1:显示
- 单击2:隐藏
- 单击3:显示
- 单击4:隐藏
- 单击5:显示
- 老鼠:藏起来
- 单击6:Hide//注意这里已经隐藏了
#下拉列表
,但不管怎样,它是一个偶数单击。单击一次,您将再次隐藏它
- 单击7:显示//单击两次以显示
不管怎样,这就是你问题的解释。正在研究解决方案
解决方案
手动触发单击事件
替换:
dropdown.mouseleave(function () {
menu.removeClass('active');
dropdown.fadeOut();
return menu;
});
与:
演示:讲解所有内容:
.toggle(处理程序(eventObject),处理程序(eventObject)[,处理程序(eventObject)])
handler(eventObject)每次单击元素时都要执行的函数。
处理程序(eventObject)每次单击元素时执行的函数
.toggle()方法为click事件绑定了一个处理程序,因此触发click的规则也适用于此处
换句话说,toggle()
根据偶数和奇数单击事件进行交替。因此:
- 单击[奇数]:显示
- 单击[偶数]:隐藏
- 单击1:显示
- 单击1:显示
- 单击2:隐藏
- 单击3:显示
- 单击4:隐藏
- 单击5:显示
- 老鼠:藏起来
- 单击6:Hide//注意这里已经隐藏了
#下拉列表
,但不管怎样,它是一个偶数单击。单击一次,您将再次隐藏它
- 单击7:显示//单击两次以显示
不管怎样,这就是你问题的解释。正在研究解决方案
解决方案
手动触发单击事件
替换:
dropdown.mouseleave(function () {
menu.removeClass('active');
dropdown.fadeOut();
return menu;
});
与:
演示:希望这能奏效
$('#menu').click(
function () {
if ($("#dropdown:visible"))
{
$('.mapNavLeft').removeClass("active");
$(this).next('#dropdown')fadeOut();
} else {
$(this).addClass("active");
$(this).next('#dropdown')fadeIn();
}
});
$("#dropdown").hover(
function () {
return false;
},
function () {
$(this).fadeOut();
}
);
希望这能奏效
$('#menu').click(
function () {
if ($("#dropdown:visible"))
{
$('.mapNavLeft').removeClass("active");
$(this).next('#dropdown')fadeOut();
} else {
$(this).addClass("active");
$(this).next('#dropdown')fadeIn();
}
});
$("#dropdown").hover(
function () {
return false;
},
function () {
$(this).fadeOut();
}
);
创建一个jsFiddle
,让我们更容易理解您试图实现的目标,并为您提供一些提示。你能帮助我吗?这就是你需要开始做的:-)创建一个jsFiddle
,让我们更容易理解你想要达到的目标。你能帮助我吗?这是您需要开始制作的:-)中途。。。如何返回到切换的前半部分?在Firefox中测试,它有点错误。它也在做同样的事情。我还在IE7中测试了它,没有骰子。我必须单击两次才能使切换再次工作。您需要调试并检查标志
值是否正确更改?我会花一些时间来检查FX和IE7,我是说它不完全工作。这正是我开始做的。中途。。。如何返回到切换的前半部分?在Firefox中测试,它有点错误。它也在做同样的事情。我还在IE7中测试了它,没有骰子。我必须单击两次才能使切换再次工作。您需要调试并检查标志
值是否正确更改?我会花一些时间来检查FX和IE7,我是说它不完全工作。这正是我开始做的。