我有这个JS功能,当我点击具有myFunc()
功能的对象时,我试图打开和关闭它。我遇到的麻烦是,当代码到达第一个if(myVar)/else
部分并尝试执行处理程序时,它已将myVar
变量切换为false
。我应该更改什么来纠正我的逻辑错误?
<script type="text/javascript">
var myVar = true;
function myFunc(myElement) {
var ele = myElement;
var myHandler = function(event) {
if(myVar) {
// do something
} else {
// do something else
}
}
if(myVar) {
window.addEventListener('mousemove', myHandler, false);
myVar = false;
} else {
window.removeEventListener('mousemove', myHandler, false);
myVar = true;
}
}
</script>
...
<body>
<div id="div1" onclick="myFunc(this)"></div>
</body>
答案 0 :(得分:2)
我认为这就是你要找的东西:
var myVar = false;
function myHandler(event) {
if (myVar) {
console.log('do something');
}
}
function myFunc(myElement) {
var ele = myElement;
myVar = !myVar;
if (myVar) {
window.addEventListener('mousemove', myHandler, false);
} else {
window.removeEventListener('mousemove', myHandler, false);
}
}
&#13;
<button onclick="myFunc(this)">click me</button>
&#13;
告诉我你在这段代码中是否有不明白的事情。
答案 1 :(得分:0)
为什么myHandler需要检查myVar的值?根据你的逻辑,当myHandler运行时,myVar将始终为false,因为在添加事件侦听器时,它总是将其设置为false。当你删除事件监听器时,myVar只会被设置为true,所以当myVar为真时,myHandler永远不会运行。
你可以从myHandler中删除if(myVar)/ else,因为myVar在那里总是假的。
答案 2 :(得分:0)
您可以通过2种方法实现这一目标
方法1:
<body>
<div id="div1">div</div>
</body>
<script type="text/javascript">
var myVar = false;
var myHandler = function() {
myVar = !myVar;
}
document.getElementById('div1').addEventListener('click', myHandler);
</script>
方法2:
<body>
<div onClick="myHandler()">div</div>
</body>
<script type="text/javascript">
var myVar = false;
var myHandler = function() {
myVar = !myVar;
}
</script>
希望你找到了你想要的东西。