为什么setTimeout()第一次只运行我的代码一次?

时间:2014-01-04 11:23:04

标签: javascript jquery

我使用此javascript代码打开两张图片,并通过单击另一张图片切换垂直菜单。知道我想运行代码而不用点击图像,带有计时器。所以我写了这段代码,但它第一次只运行一次。 我的代码出了什么问题?

<script type="text/javascript">
        $(document).ready(function () {
            $("#lista2").slideToggle(1);
            $curtainopen = false;
                        $(".rope").click(function () {
            $(this).blur();
            if ($curtainopen == false) {
                var selected = $(this).val();
                var image = $(".rope");
                image.fadeOut('fast', function () {
                    $("#largeImg").attr('src', 'images/power-on.png');
                    image.fadeIn('fast');
                });

                $(".leftcurtain").stop().animate({ left: '-120px' }, 2000);
                $(".rightcurtain").stop().animate({ left: '120px' }, 2000);

                $("#R").attr('src', 'images/Right.gif');
                $("#L").attr('src', 'images/Left.gif');
                $curtainopen = true;
                $("#lista2").slideToggle(2000);
                $(this).attr('id', '1');
            } else {
                var selected = $(this).val();
                var image = $(".rope");
                image.fadeOut('fast', function () {
                    $("#largeImg").attr('src', 'images/power-off.png');
                    image.fadeIn('fast');
                });

                $(".leftcurtain").stop().animate({ left: '0px' }, 2000);
                $(".rightcurtain").stop().animate({ left: '0px' }, 2000);
                $curtainopen = false;
                $("#lista2").hide();
                $(this).attr('id', '0');
            }
            return false;
                        });
        });

            function startTimer() {
                setTimeout($(".rope").click(), 4000);

            }

    </script>

4 个答案:

答案 0 :(得分:1)

setTimeout需要一个函数,当你传递$(".rope").click()时,会立即调用它。

一样使用它
function startTimer() {
    setTimeout(function () {
        $(".rope").click();
    }, 4000);
}

答案 1 :(得分:1)

使用此命令在特定时间间隔后执行代码

setInterval(function() {
    $(".rope").click(); // this will execute after every 4 sec.
}, 4000);

使用此命令在特定时间延迟后执行代码

 setTimeout(function() {
        $(".rope").click(); // this will execute after 4 sec delay only once.
    }, 4000);

根据您的要求使用上面

答案 2 :(得分:0)

setTimeout(function() {
    $(".rope").click();
}, 4000);

因为setTimeout需要一个函数,但$(".rope").click()立即调用自身(而不是指定要调用的函数)。因此,您不希望调用一个函数,而是将其传递给setTimeout

答案 3 :(得分:0)

计时器意味着在每次超时后重复该功能。 setTimeOut只延迟一次函数(在给定时间之后,以毫秒为单位)。

function startTimer() {
  //do your stuff
  $(".rope").click();
  //repeats itself after 4 seconds
  setTimeout(startTimer, 4000);
}

不要忘记在准备好文件时启动它:

$(document).ready(function () {
  startTimer();
  ...
}

我不希望在页面加载时立即调用你的函数,你可以添加一个初始延迟:

$(document).ready(function () {
  setTimeout(startTimer, 5000); //the timer will start only 5 seconds after page load
  ...
}