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,val3和val4.当用户离开val1,并进入val3或val4块,我想set/add opacity class...如果他们do not enter进入val3/val4,但走成val2 or another block块,然后我想删除不透明类.
在你做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代码移到其他地方.)