使用if语句检查变量true

Fri*_*end 3 javascript jquery if-statement jquery-plugins

这是我的代码:

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

    }
});
Run Code Online (Sandbox Code Playgroud)

这不符合flag = true条件.如果我alert在内$(val1).mouseleave(function(){});,它表明 flag = true; 但是当我在外面发出警报时$(val1).mouseleave(function(){});,它会显示出来flag = false.

好吧,让我来解释一下:我有4个街区val1,val2,val3val4.当用户离开val1,并进入val3val4块,我想set/add opacity class...如果他们do not enter进入val3/val4,但val2 or another block块,然后我想删除不透明类.

nnn*_*nnn 6

在你做if测试时:

if(flag==true)
Run Code Online (Sandbox Code Playgroud)

...... flag永远是假的,因为你把它设置为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
Run Code Online (Sandbox Code Playgroud)

mouseenter从处理程序内部绑定处理程序是没有意义的mouseleave,因为这意味着每次发生mouseleave时都会将另一个mouseenter处理程序绑定到相同的元素.

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