这是我的代码:
$(val1).mouseleave(function () {
flag = false;
$(val3 + "," + val4).mouseenter(function () {
flag = true;
//alert(flag);
});
if (flag == true) {
//alert("if"+flag);
$(".big" + i + j + "boxer").show();
$(".big" + i + "box").show();
$(".big" + i + "box").append('<div class="opacity" style="background-color:rgba(00,00,00,0.77);position:absolute;top:0;right:0;left:0;bottom:0;"></div>')
$(".small" + i + "box").append('<div class="opacity" style="background-color:rgba(00,00,00,0.77);position:absolute;top:0;right:0;left:0;bottom:0;"></div>')
} else {
//alert("else"+flag);
$('.opacity').remove();
$(val2).hide();
$(val3).show();
}
});
它不满足 flag = true
条件。如果我在 $(val1).mouseleave(function(){});
内 alert
,它显示 flag = true
;但是当我在 $(val1).mouseleave(function(){});
之外提醒它时,它显示 flag = false
。
好吧,让我解释一下:我有 4 个 block val1,val2,val3
和 val4
。当用户离开 val1
并进入 val3
或 val4
block 时,我想 set/add opacity class
。 .. 如果他们不进入
val3/val4
但进入 val2 或另一个 block
block 那么我想要删除不透明度类。
最佳答案
在进行 if 测试时:
if(flag==true)
...flag
将始终 为 false,因为您在此之前将其设置为 false
。它唯一设置为 true
的地方是在您绑定(bind)的 mouseenter
处理程序内部,但此时不会调用该处理程序函数。
让我在您的代码的开头添加一些注释,以尝试使其更清晰:
$(val1).mouseleave(function () {
flag = false; // set flag to false
$(val3 + "," + val4).mouseenter(function () { // bind a mouseenter
flag = true; // that won't be called immediately
//alert(flag); // so won't change flag yet
});
if (flag == true) { // flag is still false
从 mouseleave
处理程序内部绑定(bind) mouseenter
处理程序没有意义,因为这意味着每次发生 mouseleave 时,您都会绑定(bind)一个额外的 mouseenter
相同元素的处理程序。
我真的不能建议一个具体的解决方案,因为你还没有解释你想要达到的效果。 (但我可能会先将 mouseenter
代码移到其他地方。)
关于javascript - 使用 if 语句检查变量 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424352/