JavaScript, если оператор с логическим не работает - PullRequest
0 голосов
/ 14 июня 2019

У меня есть функция mouseover и mouseenter, которая должна работать, только если моя переменная не установлена ​​в true.Но функции мыши работают независимо от того, что.

Оператор If проверяет, является ли переменная НЕ ИСТИННОЙ, но, похоже, она не работает, как я ее настроил.Функция click устанавливает переменную в true, поэтому, когда она щелкается, я не могу видеть, как работает функция наведения мыши, пока я не установлю «execute» обратно в false.

Любые указания приветствуются

var executed = false;

if (executed != true) {
    $('.elm').mouseover(function(event) {
        // do something only if variable is not set to true
    })
};
if (executed != true) {
    $('.elm').mouseout(function(event) {
        // do something only if variable is not set to true
    })
};

$('.elm').click(function() {
    // do something and set variable to true
    executed = true;

});

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Ваши операторы if определяют только, зарегистрированы ли обработчики событий mouseover / mouseout.Это так, потому что false - это ... ну, не так.

Позже значение executed меняется, но это уже не имеет значения, потому что эти операторы if больше не выполняются,Обработчики событий уже зарегистрированы и вызываются.

Возможно, вы захотите сделать это вместо этого:

$('.elm').mouseover(function(event) {
  if (executed != true) {
    // do something only if variable is not set to true
  }
});

Т.е. всегда регистрируйте обратный вызов, но проверьте переменную executed внутри функция, каждый раз, когда она вызывается.

Вы можете немного упростить эту логику:

$('.elm').mouseover(function(event) {
  if (executed) {
    return;
  }
  // do something only if variable is not set to true
});

Просто вернитесь рано, если executed истинно.Таким образом, вам не нужно помещать все тело функции в оператор if.

0 голосов
/ 14 июня 2019

Попробуй это. Отключить сами события

$('.elm').click(function() {
  // do something and set variable to true
  disableMouseEvents();
  executed = true;

});

function disableMouseEvents(){
   let el = $('.elm');
   // For all major browsers, except IE 8 and earlier
   if ( el.removeEventListener ){
      el.removeEventListener("mouseover", myFunction);
   }
   // For IE 8 and earlier versions
   else if(el.detachEvents){
      el.detachEvent("mouseout", myFunction);
   }
}

Затем включите прослушиватель событий. Просто добавьте их туда, где вы установите свой исполняемый флаг, чтобы быть истинным.

...