Javascript 如何在“打开”按钮区域外单击以关闭菜单?
单击特定按钮时会打开一个菜单 我想关闭菜单,也可以在按钮外单击 这是小提琴: 这可能吗 下面是javascript:Javascript 如何在“打开”按钮区域外单击以关闭菜单?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,单击特定按钮时会打开一个菜单 我想关闭菜单,也可以在按钮外单击 这是小提琴: 这可能吗 下面是javascript: (function() { var btn = $('#btn'); menu = $('nav ul'); menuHeight = menu.height(); $(btn).on('click', function(e) { e.preventDefault(); menu.slideToggle(); })
(function() {
var btn = $('#btn');
menu = $('nav ul');
menuHeight = menu.height();
$(btn).on('click', function(e) {
e.preventDefault();
menu.slideToggle();
});
$(window).resize(function(){
var w = $(window).width();
if(w > 320 && menu.is(':hidden')) {
menu.removeAttr('style');
}
});
});
我强烈推荐jQuery outsideevents
$(btn).bind(“单击外部”,函数(事件){
//隐藏菜单的代码。
});代码>
它完成了所有的工作,为你找到所有“不是按钮”的东西
我还应该提到,它的作用远不止单击外部,比如你可以检查它们是否也聚焦在外部,因此如果它们使用选项卡快捷方式来导航页面,菜单仍然关闭,等等。你可以简单地将listener设置在body上
$(".image").on('click', function(e) {
e.preventDefault();
menu.slideToggle();
});
您确实希望在单击非#btn
按钮后进行操作
$( document ).ready(function(){
$('body *').not('#btn').click(function(){
e.preventDefault();
menu.slideToggle();
})
});
不要忘记在事后取消连接事件。执行此操作
$('html').click(function() {
menu.slideUp();
});
$('.nav-wrapper').click(function(event){
event.stopPropagation();
});
使用onblur事件。它与onfocus相反,在元素失去焦点时触发
onblur
$('body*:not('#btn'))。单击(function(){})
将事件侦听器分配给文档,以检查事件目标是否不是菜单关闭所述菜单,我想……形式战胜了内容。没有插件你也可以做同样的事情(看看源代码)。不,不,不,当然,没有插件你也可以做同样的事情。插件仅仅是代码,因此任何插件所做的任何事情都可以在没有插件的情况下完成。然而,我的观点是,您可以使您的应用程序更健壮、更容易。例如,在有人单击外部时关闭菜单对于屏幕阅读器来说不是很好。你应该处理制表符、焦点等问题,像“不,不,不,不”这样的回答不会增加讨论的价值。既然我已经给出了为什么这是一个比其他建议更好的主意的理由,那就说明为什么这是一个如此糟糕的主意吧。我试过了,但它又一次关闭了菜单。看这把小提琴:是的,对不起,身体意味着整个文件。您需要识别响应单击的元素。我已经更新了答案。通过这样做,我似乎也可以通过单击“.image”类打开菜单。这就是问题所在。除了我的当前代码,还是代替我的当前代码?将此添加到您的代码中您想要类似的内容吗??