使用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,val3
和val4
。 当用户离开val1
并输入val3
或val4
块时,我想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"; });
将标志声明为全局变量。 应该解决它。 除非您这样做,否则您要在外部警告的标志实例不存在,因为该函数是本地的。