1

JavaScript カウントダウンを作成するための検索でこれを見つけましたが、うまくいかないようです。他の誰も問題を報告していないようなので、私は驚いています. 私は何か根本的なものを見逃しているに違いありません。

https://gist.github.com/nithinbekal/299417

これはJSFiddleにあるコードで、私にとっては機能していないようです。

http://jsfiddle.net/96TWk/

function updateWCTime() {
    now      = new Date();
    kickoff  = Date.parse("April 27, 2013 09:00:00");
    diff = kickoff - now;

    days  = Math.floor( diff / (1000*60*60*24) );
    hours = Math.floor( diff / (1000*60*60) );
    mins  = Math.floor( diff / (1000*60) );
    secs  = Math.floor( diff / 1000 );

    dd = days;
    hh = hours - days  * 24;
    mm = mins  - hours * 60;
    ss = secs  - mins  * 60;

        document.getElementById("countdown")
            .innerHTML =
                dd + ' days ' +
                hh + ' hours ' +
                mm + ' minutes ' +
                ss + ' seconds';
}
setInterval('updateWCTime()', 1000 );
4

3 に答える 3

2

間隔を (ライブ フィドル: http://jsfiddle.net/96TWk/1/ )に変更します。

setInterval(updateWCTime, 1000 );

コンソールには、関数updateWCTimeが見つからないというメッセージが表示されますが、正確な理由はわかりません。大丈夫そうです。

于 2013-04-21T12:52:16.967 に答える
1

次のいずれかに変更することで、jsFiddle を修正できます。

setInterval(updateWCTime, 1000 );

または、jsFiddle の左パネルの設定onloadをいずれかのno wrapオプションに変更します。jsFiddle の左側のパネル設定のみを「No wrap - in」に変更するデモを次に示します: http://jsfiddle.net/jfriend00/rdj96/

うまくいかなかった理由の説明です。次のように文字列を渡すとsetInterval():

setInterval('updateWCTime()', 1000 );

JavaScript インタプリタはeval()文字列を評価するために使用し、関数はグローバル スコープ内にある必要があります。しかし、onloadjsFiddle の左側のパネルにあるため、すべての JavaScript が別の関数 (たとえば、グローバルではない) 内にあるためeval()、その関数を見つけることができません。

コードを次のように変更する

setInterval(updateWCTime, 1000 ); 

JavaScript が通常の関数参照を使用することを許可し、ローカル スコープで関数を見つけることができます (グローバルである必要はありません)。

参考までに、文字列を に渡すことはほとんどありませんsetInterval()

于 2013-04-21T13:06:33.220 に答える