Tengo esta función JS que estoy tratando de activar y desactivar cuando hago clic en el objeto con la función myFunc(). El problema que tengo es que cuando el código llega a la primera parte if(myVar)/else e intenta hacer el controlador, ya ha cambiado la variable myVar a false. ¿Qué debo cambiar para corregir mi error lógico?

    <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
lowxkey 2 mar. 2018 a las 14:07

3 respuestas

La mejor respuesta

Creo que esto es lo que estás buscando:

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>

Dime si hay algo que no entiendes en este código.

2
julien 2 mar. 2018 a las 12:16

¿Por qué myHandler necesita verificar el valor de myVar? Según su lógica, myVar siempre será falso cuando se ejecute myHandler, porque siempre lo está configurando como falso cuando agrega el detector de eventos. myVar solo se establecerá en verdadero cuando elimine el detector de eventos, por lo que myHandler nunca se ejecutará cuando myVar sea verdadero.

Puede eliminar el if (myVar) / else de myHandler ya que myVar siempre será falso allí.

0
Levi Rocha 2 mar. 2018 a las 11:19

Puedes lograr esto por 2 métodos

Método 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>

Método2:

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

Espero que hayas encontrado lo que estás buscando.

0
Nadun 2 mar. 2018 a las 11:30