3

ページがロードされてから 60 秒後に JavaScript 関数を実行したかったのです。私が行った少しの調査の後、 setTimeout() が解決策であることがわかりました。

それが私がしたことです:

<body onLoad="setTimeout(postAction('news.reads', 'article'), 60000);">

どういうわけか、setTimeout が機能しません。ページが読み込まれた後、postAction() がすぐに実行されるため、60 秒待つ必要はありません。

なぜそれが起こっているのですか?それを解決する方法は?setTimeout() に代わるものはありますか? ありがとうございました!

4

4 に答える 4

11

postAction実行を延期するには、関数をラップする必要があります。

setTimeout(function() { postAction('news.reads', 'article'); }, 60000);

実際にはpostActionすぐに実行しています。コードは次のようになります。

var result = postAction('news.reads', 'article');

setTimeout(result, 60000);
于 2012-11-06T22:25:49.597 に答える
0

JS で必要なことを行う正しい方法、つまり、ページが読み込まれた後にタイムアウトを設定する方法:

(function(w)
{
    var load = function()
    {
         setTimeout(postAction,60000);
         if (w.removeEventListener)
         {//remove listeners, to avoid leak...
             return w.removeEventListener('load',load,false);
         }
         return w.attachEvent('onload',load);
    };
    if (w.addEventListener)
    {
        return w.addEventListener('load',load,false);
    }
    return w.attachEvent('onload',load);
}(this));

の代わりにwindow.onload = function(){setTimeout(postAction,60000);};、これも機能しますが、IE <9 でメモリリークが発生します。それは完全を期すためです
とにかく、ここでのキーラインはsetTimeout(postAction,60000);

更新
使用しているコードを確認した後、これが最も簡単な修正です。

<body onLoad="setTimeout(function(){ return postAction('news.reads', 'article');}, 60000);">
于 2012-11-06T22:23:12.710 に答える
0

次のように使用していますかsetTimeout

setTimeout(function(){alert("OK");}, 1000 * 60); // alert "OK" in 60s
于 2012-11-06T22:16:09.267 に答える
-2
<script>
        function doSomeJavascript() {
            // javascript code goes here
           alert('5 secs is up!');
        }
        // calls function doSomeJavascript() 5 secs after page load
        var interval = setInterval(doSomeJavascript, 5000);

        setTimeout(function() {
           window.clearInterval(interval);
        }, 5000);
</script>
于 2012-11-06T22:16:57.860 に答える