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

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

本文关键字:事件 我的 语句 IF javaScript jQuery 为什么      更新时间:2023-09-26

我确信这只是我没有正确理解JavaScript基础知识。但是有人能指出为什么我有这样的印象,我的if语句计算为真,事件冒泡,即使if语句内的语句应该计算为假吗?

如果(sFormula> 168)似乎工作的预期当我按下html 标签,但如果我快速点击它,一切似乎都疯了。

这是一个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 });
}

(注意,我还移动了这里的标志设置,因为在动画开始之前设置它没有任何好处。)

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