我有一个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;
});
答案 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的位置即可。