javascript:使用onclick切换事件侦听器

javascript:使用onclick切换事件侦听器,javascript,Javascript,我有一个JS函数,当用myFunc()函数单击对象时,我试图打开和关闭它。我遇到的问题是,当代码到达第一个if(myVar)/else部分并尝试执行处理程序时,它已经将myVar变量切换为false。我应该改变什么来纠正我的逻辑错误 <script type="text/javascript"> var myVar = true; function myFunc(myElement) { var ele = myElem

我有一个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>

var-myVar=true;
函数myFunc(myElement){
var-ele=myElement;
var myHandler=函数(事件){
if(myVar){
//做点什么
}否则{
//做点别的
}
}
if(myVar){
addEventListener('mousemove',myHandler,false);
myVar=false;
}否则{
removeEventListener('mousemove',myHandler,false);
myVar=true;
}
}


为什么myHandler需要检查myVar的值?根据您的逻辑,当myHandler运行时,myVar将始终为false,因为您在添加事件侦听器时总是将其设置为false。只有在删除事件侦听器时,myVar才会设置为true,因此当myVar为true时,myHandler永远不会运行


您可以从myHandler中删除if(myVar)/else,因为myVar在那里总是false。

为什么myHandler需要检查myVar的值?根据您的逻辑,当myHandler运行时,myVar将始终为false,因为您在添加事件侦听器时总是将其设置为false。只有在删除事件侦听器时,myVar才会设置为true,因此当myVar为true时,myHandler永远不会运行


您可以从myHandler中删除if(myVar)/else,因为myVar在那里总是为false。

您可以通过两种方法实现这一点

方法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>

div
var-myVar=false;
var myHandler=function(){
myVar=!myVar;
}
document.getElementById('div1')。addEventListener('click',myHandler);
方法2:

<body>
    <div onClick="myHandler()">div</div>
</body>
<script type="text/javascript">
        var myVar = false;
        var myHandler = function() {
          myVar = !myVar;
        }
</script>

div
var-myVar=false;
var myHandler=function(){
myVar=!myVar;
}

希望你已经找到了你想要的东西。

你可以通过两种方法来实现

方法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>

div
var-myVar=false;
var myHandler=function(){
myVar=!myVar;
}
document.getElementById('div1')。addEventListener('click',myHandler);
方法2:

<body>
    <div onClick="myHandler()">div</div>
</body>
<script type="text/javascript">
        var myVar = false;
        var myHandler = function() {
          myVar = !myVar;
        }
</script>

div
var-myVar=false;
var myHandler=function(){
myVar=!myVar;
}

希望你已经找到了你想要的东西。

我想这就是你想要的:

var myVar=false;
函数myHandler(事件){
if(myVar){
log('do something');
}
}
函数myFunc(myElement){
var-ele=myElement;
myVar=!myVar;
if(myVar){
addEventListener('mousemove',myHandler,false);
}否则{
removeEventListener('mousemove',myHandler,false);
}
}

点击我
我想这就是你想要的:

var myVar=false;
函数myHandler(事件){
if(myVar){
log('do something');
}
}
函数myFunc(myElement){
var-ele=myElement;
myVar=!myVar;
if(myVar){
addEventListener('mousemove',myHandler,false);
}否则{
removeEventListener('mousemove',myHandler,false);
}
}

单击我
myVar在单击时更改值。当JS加载时,它开始为true,单击后会变为false,再次单击时会变为true等等。我知道即使myVar为false,myHandler也会运行,因为其中的代码会执行。问题是代码的作用与我所希望的相反:它跳过第一次单击(除了更改myVar值外,不做任何事情),然后在myVar为true时运行false代码块,在myVar为false时运行true代码块。如果您只想让它做与其相反的事情,请将检查更改为If(!myVar)它是这样工作的,但我觉得这仍然不是正确的方法,因为它应该添加事件侦听器,并在myVar为true时执行第一个myHandler部分,但我想如果找不到更好的方法来解决它,我会坚持这样做。myHandler变量函数落后了一步,当我添加更多使用同一onclick事件的div时会出现问题。如果您希望myVar仅在第一次运行myHandler后为false,请在检查myVar后在myHandler内部将其设置为false,在添加eventHandler之后就不会了。它将处于一个无休止的将值设置为true/false的循环中,这样也不能正常工作。正如我所说的,myHandler变量函数落后了一步,当我添加更多使用相同onclick event.myVar的div时,问题就会出现。当JS加载时,它开始为true,单击后会变为false,再次单击时会变为true等等。我知道即使myVar为false,myHandler也会运行,因为其中的代码会执行。问题是代码的作用与我所希望的相反:它跳过第一次单击(除了更改myVar值外,不做任何事情),然后在myVar为true时运行false代码块,在myVar为false时运行true代码块。如果您只想让它做与其相反的事情,请将检查更改为If(!myVar)它是这样工作的,但我觉得这仍然不是正确的方法,因为它应该添加事件侦听器,并在myVar为true时执行第一个myHandler部分,但我想如果找不到更好的方法来解决它,我会坚持这样做。myHandler变量函数落后一步,当我添加更多使用同一onclick事件的div时,问题就会出现。如果您希望myVar仅在第一次运行myHandler后才为false,请将其设置为fals