使用if语句检查变量true

这是我的代码:

$(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('
') $(".small" + i + "box").append('
') } else { //alert("else"+flag); $('.opacity').remove(); $(val2).hide(); $(val3).show(); } });

它不符合flag = true条件。 如果我在$(val1).mouseleave(function(){});alert $(val1).mouseleave(function(){}); ,它表明flag = true ; 但是当我在$(val1).mouseleave(function(){});之外提醒它时$(val1).mouseleave(function(){}); ,它显示flag = false

好吧,让我解释一下:我有4个区块val1,val2,val3val4 。 当用户离开val1并输入val3val4块时,我想set/add opacity class …如果它们do not enter val3/val4但是进入val2 or another block块块,那么我想删除不透明度类。

在你进行if测试时:

 if(flag==true) 

flag始终为false,因为您在此之前将其设置为false 。 它被设置为true的唯一位置是在您绑定的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处理程序内部绑定mouseenter处理程序没有意义,因为这意味着每次发生mouseleave时都会将另一个mouseenter处理程序绑定到相同的元素。

我无法真正建议一个具体的解决方案,因为你还没有解释你想要实现的效果。 (但我可能首先将mouseenter代码移到其他地方。)

 $(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('
') $(".small" + i + "box").append('
') } else { //alert("else"+flag); $('.opacity').remove(); $(val2).hide(); $(val3).show(); } }); });

既然你已经澄清了你的目标,我认为这样的事情会起作用:

 var haveLeft = null; $(val1).mouseleave(function () { haveLeft = "val1"; }); $(val2).mouseenter(function () { if(haveLeft === "val1") { // remove opacity class } }).mouseleave(function(){ haveLeft = "val2"; }); $(val3 + "," + val4).mouseenter(function () { if(haveLeft === "val1") { // add opacity class } }).mouseleave(function(){ haveLeft = "val3/4"; }); 

将标志声明为全局变量。 应该解决它。 除非您这样做,否则您要在外部警告的标志实例不存在,因为该函数是本地的。