【发布时间】:2018-05-10 11:59:43
【问题描述】:
当我按下 menu-toggle 时,我需要一个元素来切换,然后当我按下页面上的任意位置(在 wrapper em> 元素),我需要它再次切换。
这是我的代码:
var bodyclick = 0;
console.log(bodyclick);
//If you clicks the menu toggle, then activate toggle and bodyclick should be 1
$("#menu-toggle").click(function(e) {
e.preventDefault();
$("#wrapper").toggleClass("toggled");
bodyclick = 1;
console.log(bodyclick);
});
//Now, that the bodyclick is 1, user should click anywhere on the wrapper to activate the toggle again
if (bodyclick === 1) {
console.log("The wrapper is toggled");
$("#wrapper").click(function(e) {
//e.preventDefault();
$("#wrapper").toggleClass("toggled");
bodyclick = 0;
});
}
当用户点击 #menu-toggle 元素时,包装器应该切换并且 bodyclick var 应该为 1。
现在第二个功能应该可以工作了。如果用户在 #wrapper 上单击 ANYWHERE,它应该再次切换它并将 bodyclick 更改回 0。
由于某种原因,这不起作用。它不会启动 if 语句。控制台日志显示 bodyclick 为 1,但 if 不起作用。
我尝试使用 == 但它并没有改变任何东西。为什么 if 不起作用?
编辑 添加@Nikhil Aggarwal 答案后:
var bodyclick = 0;
console.log(bodyclick);
$("#menu-toggle").click(function (e) {
e.preventDefault();
$("#wrapper").toggleClass("toggled");
bodyclick = 1;
console.log(bodyclick);
});
$("#wrapper").click(function(e) {
if (bodyclick === 1) {
console.log("The wrapper is toggled");
//e.preventDefault();
$("#wrapper").toggleClass("toggled");
bodyclick = 0;
}
});
切换在#menu-toggle 上工作,它甚至将bodyclick 设置为1。
但是当我现在单击包装器上的任意位置时(在#menu-toggle 上切换之后),它不会切换元素或将 bodyclick 值更改回零。
对此我深表歉意,但我只是不明白其中的逻辑。
已修复,感谢@Nikhil Aggarwal:
只需在#menu-toggle函数中添加e.stopPropagation();即可。
【问题讨论】:
-
在事件处理程序中移动
if (bodyclick === 1) -
jQuery 不代理它的变量和函数。 bodyclick 变量仅在 DOM 执行完成时可用。
标签: javascript jquery