javascript如果带有布尔值的语句不起作用

时间:2019-06-14 14:03:01

标签: javascript if-statement boolean

我有一个mouseover和mouseenter函数,该函数仅在我的变量未设置为true时才起作用。但是无论如何,鼠标功能都会触发。

If语句检查变量是否不为TRUE,但由于设置了变量,它似乎不起作用。 click函数将变量设置为true,因此当单击它时,直到将'executed'设置回false之前,我才能看到mouseover函数正常工作。

任何指导表示赞赏

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 个答案:

答案 0 :(得分:2)

您的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语句中。

答案 1 :(得分:0)

尝试一下。禁用事件本身

$('.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);
   }
}

然后启用事件监听器。只需将它们添加回您将已执行标志设置为true的位置即可。