我在导航栏上创建了一个侧面导航栏,通过单击远离导航栏按钮的任何点,导航栏折叠和按钮无法点击
$("#menu-toggle").click(function (e) {
e.preventDefault();
$("#wrapper").toggleClass("toggled");
});
$(document).click(function (e) {
if ($('#wrapper').hasClass('toggled')) {
$("#body").click(function (e) {
e.preventDefault();
$("#wrapper").removeClass("toggled");
});
}
});
答案 0 :(得分:0)
在点击事件之后不要绑定点击事件。
我看不到$(document).click(function(e){ })
$("#menu-toggle").click(function (e) {
e.preventDefault();
$("#wrapper").toggleClass("toggled");
});
$("#body").click(function (e) {
e.preventDefault();
if ($('#wrapper').hasClass('toggled'))
$("#wrapper").removeClass("toggled");
});
如果需要将#
上的$('#body')
放在<body>
标记上并且<body>
标记中没有id,则可以删除它。因为#
是一个ID选择器。
答案 1 :(得分:0)
实际上,您是在click
元素上覆盖$("#menu-toggle")
事件处理程序,该定义是在以下位置进行的:
$("#menu-toggle").click(function (e) {
通过在行click
上附加一个document
事件:
$(document).click(function (e) {
由于document
是页面中的全局元素,而所有其他元素都在页面内部,因此通过将click
事件处理程序附加到document
,您将忽略所有其他{{ 1}}页面上的处理程序。
编辑:
代码中的另一个问题是您将click
事件处理程序附加到另一个click
事件处理程序中:
click
这将在每次单击$(document).click(function (e) {
if ($('#wrapper').hasClass('toggled')) {
$("#body").click(function (e) {
e.preventDefault();
$("#wrapper").removeClass("toggled");
});
}
});
时将第二个处理程序附加到body
元素,这是一种非常错误的方法,因为您总是会附加一个新的document
事件处理程序点击click
会导致您的应用性能下降。