问题是在点击外部滑动菜单的功能在触发器点击下滑动菜单之后立即执行(所以点击菜单向下滑动然后立即向上滑动)它不应该,它必须在执行之后执行点击外面,它出了什么问题?
$(document).ready(function(){
// build a variable to target the #menu div
var menu = $('#menu')
// bind a click function to the menu-trigger
$('#menu-trigger').click(function(event){
event.preventDefault();
// if the menu is visible slide it up
if (menu.is(":visible"))
{
menu.slideUp(400);
}
// otherwise, slide the menu down
else
{
menu.slideDown(400);
}
});
$("body").not('#menu, #menu-trigger').click(function(event) {
event.preventDefault();
if (menu.is(":visible"))
{
menu.slideUp(400);
}
});
})
答案 0 :(得分:2)
以下是您想要的完整行为
使用$(document)
代替$('body')
$(document).not('#menu, #menu-trigger').click(function(event) {
event.preventDefault();
if (menu.is(":visible"))
{
menu.slideUp(400);
}
});
并在菜单触发器的event.stopPropagation()
中使用click()
答案 1 :(得分:1)
Frederik在Document click not in elements jQuery
中找到了一个非常好的答案修改了一个位以支持文档中尚未出现的元素,例如由ajax调用提取的元素。
$(document).on('click',function(event) {
if (!$(event.target).closest("#selector").length) {
if ($('#selector').is(":visible"))
$('#selector').slideUp();
}
});
答案 2 :(得分:0)
答案 3 :(得分:0)
event.stopPropagation()停止传播默认浏览器 http://api.jquery.com/event.stopPropagation/
答案 4 :(得分:0)
这就是你想要的:
$(document).ready(
function() {
var expanded = false;
// When clicked on the menu-trigger
$("#menu-trigger").click(
function(event) {
// Slide down menu if hidden
if (!expanded) {
event.stopPropagation();
$("#menu").slideDown();
expanded = true;
}
// Slide up menu if shown
else {
$("#menu").slideUp();
expanded = false;
}
}
);
// Hide if clicked anywhere on the page
$(document).click(
function () {
if (expanded) {
$("#menu").slideUp();
expanded = false;
}
}
);
// Prevent slideUp if clicked on the Menu div itself
// (You can omit this part if you don't need it)
$("#menu").click(
function(event) {
event.stopPropagation();
}
);
}
);