最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript: toggle event listener with onclick - Stack Overflow

programmeradmin5浏览0评论

I have this JS function which I'm trying to toggle on and off when clicked on the object with the myFunc() function on it. The trouble I'm having is that by the time the code reaches the first if(myVar)/else part and tries to do the handler it has already switched the myVar variable to false. What should I change to correct my logic error?

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

I have this JS function which I'm trying to toggle on and off when clicked on the object with the myFunc() function on it. The trouble I'm having is that by the time the code reaches the first if(myVar)/else part and tries to do the handler it has already switched the myVar variable to false. What should I change to correct my logic error?

    <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>
Share Improve this question edited Mar 2, 2018 at 11:14 lowxkey asked Mar 2, 2018 at 11:07 lowxkeylowxkey 661 gold badge1 silver badge9 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 4

I think this is what you are looking for:

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);
  }
}
<button onclick="myFunc(this)">click me</button>

Tell me if there is something you're not understanding in this code.

Why does myHandler need to check the value of myVar? According to your logic, myVar will always be false when myHandler runs, because you're always setting it to false when you add the event listener. myVar will only ever be set to true when you remove the event listener, so myHandler will never run when myVar is true.

You can remove the if(myVar)/else from myHandler since myVar will always be false there.

you can achieve this by 2 methods

method 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>

method2:

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

hope you have found what you are looking for.

发布评论

评论列表(0)

  1. 暂无评论