繁体   English   中英

为什么javaScript / jQuery在事件冒泡时似乎忽略了我的IF语句?

[英]Why does javaScript / jQuery seem to ignore my IF statement on event bubbling?

我敢肯定,只是我没有正确理解JavaScript基础。 但是有人能指出为什么为什么在事件冒泡时我的if语句的评估结果为true,即使if语句中的语句的评估结果为false吗?

当我一次按html <a>标记时,if(sFormula> 168)似乎可以按预期工作,但是如果我快速单击它,一切似乎都变得疯狂了。

这是一个带有代码的jsFiddle: http : //jsfiddle.net/twimB/pGHrP/ ,下面仅是其中的一小段。

如果有人可以花时间解释,我将不胜感激。

谢谢。

HTML

<a href="#" id="right">&raquo;</a>

jQuery的

$("#right").click(function(event){
    event.stopImmediatePropagation();
    if(busy == false){
        busy = true ;
        var parentMargin = $(".wrap").offset().left;
        var parentWidth = $(".wrap").width();
        var carouselMargin = $(".block").offset().left;
        var carouselWidth = $(".block").width();
        var rFormula = carouselWidth - ((parentMargin - carouselMargin) + parentWidth);
        $(".pLeft").text("");
        $(".pRight").text("if ( rFormula > 0 ) {perform slide} fFormula is: " + rFormula);
        if(rFormula > 168){
            $(".block").animate({"left": "-=168px"}, "slow");
        }
        busy = false ;
    }
});

.animate()方法不会停止脚本执行。 发生的情况是它开始动画并且脚本执行继续,并且busy立即设置为false。

您需要的是仅在动画完成后使用回调函数设置标志:

if(rFormula > 168){
    busy = true;
    $(".block").animate({"left": "-=168px"}, "slow", function() { busy = false });
}

(请注意,我还将标记的设置移到了这里,因为在动画开始之前对其进行设置没有任何好处。)

演示: http : //jsfiddle.net/pGHrP/1/ (我只更新了右键)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM