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

时间:2018-03-02 11:07:02

标签: javascript

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

3 个答案:

答案 0 :(得分:2)

我认为这就是你要找的东西:

&#13;
&#13;
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;
&#13;
&#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>
希望你找到了你想要的东西。