为什么要执行两次?

时间:2010-10-20 23:00:15

标签: javascript jquery firefox execution

我有这样的代码:

$(document).ready(function() {

    $("div #covert, div #coverb").height($(window).height() / 2 + 1);
    $(window).resize(function() {
        $("div #covert, div #coverb").height($(window).height() / 2 + 1);
        covconcr();
    });

    function covconcr() {
        $('div #covercon').css('left', $(window).width() / 2 - $('#covercon').width() / 2);
    }

    covconcr();

    function hidecover() {
        var goup = $('div #covert').height();
    }

    $("div #covercon").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").delay(100).fadeIn("fast", function() {
        $(this).stop();
    });

    $('title').html('Drink86_browser.detection');

    var logoop;

    jQuery.each(jQuery.browser, function() {
        if ($.browser.msie) {
            $('div #covercon').delay(3000, function() {
                $(this).html("YOUR BROWSER IS: INTERNET EXPLORER.");
                $('title').html('Drink86_your.browser.is.internet.explorer');
            });
        }
        else if (!$.browser.msie) {
            function update() {
                //$('#site').load('site.php');
                $('div #covercon').html("YOUR BROWSER IS: " + jQuery.uaMatch(navigator.userAgent).browser + ".");
                covconcr();
                $('title').html('Drink86_your.browser.is.' + jQuery.uaMatch(navigator.userAgent).browser + ' ');

                function hidecov() {
                    $('title').html('Drink86_loading_files');
                    $('#covercon').html($('#loading').html());
                    covconcr();
                    var timer = setInterval(function() {
                        $("#loadingpro").html(Math.round($("#progress").width() / 4) + "%");
                    }, 20);
                    $("#progress").animate({
                        width: 400
                    }, 2000, function() {
                        $('title').html('Drink86_');
                        clearInterval(timer);
                        $('#covercon').delay(700).fadeOut('fast', function() {
                            //    if(logoop!="yes"){
                            $('#logobig').css('left', $(window).width() / 2 - $('#logobig').width() / 2).css('top', $(window).height() / 2 - $('#logobig').height() / 2);
                            $('#logobig').fadeIn(3000).delay(2500).fadeOut(3000);
                            logoop = "yes";
                            // }
                        });
                    });
                }
                setTimeout(hidecov, 1000);
            }
            setTimeout(update, 3100);
        }
    });
});

#logobigfadeInfadeOut)的操作会执行两次。 为什么? 我之前的问题与之类似,但后来他们只在Firefox中执行了两次。 任何想法为什么?

5 个答案:

答案 0 :(得分:4)

你到底在想什么?

jQuery.each(jQuery.browser, function() { ...

这真的没有意义。只需看看jQuery.browser(如果必须的话)。

另外,在“if”语句中检查它是否是IE,然后如果它不是“else”部分中的IE,那么,再次......

你问题的直接答案是jQuery.browser可能有两件事,所以你做了两次。

答案 1 :(得分:4)

我认为你的问题是你正在迭代jQuery的浏览器标志集合,这对于完成你正在做的事情来说并不是必需的。如果你在Firefox中查看页面,if / elseif的第二个子句将在每个循环上执行,因为值永远不会改变。尝试从每个循环中删除该函数,以便它看起来像这样:

if ($.browser.msie) {
    $('div #covercon').delay(3000, function() {
        $(this).html("YOUR BROWSER IS: INTERNET EXPLORER.");
        $('title').html('Drink86_your.browser.is.internet.explorer');
    });
} else if (!$.browser.msie) {
    function update() {
        //$('#site').load('site.php');
        $('div #covercon').html("YOUR BROWSER IS: " + jQuery.uaMatch(navigator.userAgent).browser + ".");
        covconcr();
        $('title').html('Drink86_your.browser.is.' + jQuery.uaMatch(navigator.userAgent).browser + ' ');

        function hidecov() {
            $('title').html('Drink86_loading_files');
            $('#covercon').html($('#loading').html());
            covconcr();
            var timer = setInterval(function() {
                $("#loadingpro").html(Math.round($("#progress").width() / 4) + "%");
            }, 20);
            $("#progress").animate({
                width: 400
            }, 2000, function() {
                $('title').html('Drink86_');
                clearInterval(timer);
                $('#covercon').delay(700).fadeOut('fast', function() {
                    //    if(logoop!="yes"){
                    $('#logobig').css('left', $(window).width() / 2 - $('#logobig').width() / 2).css('top', $(window).height() / 2 - $('#logobig').height() / 2);
                    $('#logobig').fadeIn(3000).delay(2500).fadeOut(3000);
                    logoop = "yes";
                    // }
                });
            });
        }
        setTimeout(hidecov, 1000);
    }
    setTimeout(update, 3100);
}

答案 2 :(得分:2)

jQuery.each(jQuery.browser

不要遍历“浏览器”对象中的每个项目。我怀疑还有不止一个!$。browser.msie

答案 3 :(得分:1)

您在setTimeout(hidecov, 1000)内召唤update(),然后在更新之外召唤setTimeOut(update, 3100),以便在1000毫秒后调用hidecov一次,然后调用update在3100毫秒,在那里它将在1000毫秒内在setTimeout上执行另一个hidecov

我不确定所有这些代码是如何尝试的,所以我无法告诉您如何更改它,但我可以看到为什么hidecov被调用两次。

答案 4 :(得分:0)

我对Javascript不是最好的,所以我可能完全没有这个,但看起来hidecov可以在调用更新时运行,然后在1秒后再次运行。

在hidecov中使用带有断点的firebug应指向何时运行。