有点在JS的单身人士

时间:2015-07-20 07:18:40

标签: javascript jquery events singleton handler

我想确保如果一个#offer img触发了附加到事件处理程序的函数,那么在第一个函数完成其作业之前,没有其他#offer img触发另一个函数。我发现我需要有点Singleton。 这是我试图做的事情:

$(document).ready(function () {
    var inProgress = false;
    $('#offer img').mouseover(function (event) {
        if (!inProgress) {
            inProgress = true;

            $('#offer div img').addClass('gray');
            $(event.target).removeClass('gray');

            var clickedId = event.target.id;
            var textId = '#' + clickedId.substr(0, clickedId.search('_'));
            $('.innerContent p:visible').fadeOut(300, function () {
                $(textId).fadeIn();
            });

            inProgress = false;
        } else {
            return;
        }
    }); 
});

不工作。这段代码出了什么问题? 任何帮助表示赞赏:)

1 个答案:

答案 0 :(得分:1)

问题是在你的所有fadeIn和fadeOut函数完成解析之前,inProg设置为False immediatley。所以你的mouseOver函数已经完成,但fadeIn和fadeOut却没有。

如果你希望inProgress不被设置,直到淡入完成类似

        $('.innerContent p:visible').fadeOut(300, function () {
            $(textId).fadeIn(300, function(){
                inProgress = false;
            });
        });

    } else {
        return;
    }