0

変数を作成するためのショートカットJavaScriptファイルを作成$dateしてい$timeます。私の知る限りでは機能するはずですが、表示されず、GoogleChromeのデバッガーに[Uncaught TypeError: Cannot Read 'firstChild' of null]

これが私のコードです:

function mdy(){

    var
        h = new Date(),
        year = h.getFullYear(),
        month = h.getMonth() + 1,
        day = h.getDate();

        if(month < 10) { month = "0" + month; }

        if(day < 10) { month = "0" + month; }

        var string = month + "/" + day + "/" + year;

        document.getElementById('mdy').firstChild.nodeValue = string;

}

function ymd(){

    var
        h = new Date(),
        year = h.getFullYear(),
        month = h.getMonth() + 1,
        day = h.getDate();

        if(month < 10) { month = "0" + month; }

        if(day < 10) { month = "0" + month; }

        var string = year + "/" + month + "/" + day;

        document.getElementById('ymd').firstChild.nodeValue = string;

}

var $date = {

    mdy: '<span id="mdy">&nbsp;</span>',
    ymd: '<span id="ymd">&nbsp;</span>'

}

/* $time module */
// this comes in two formats, standard and military. 
// type $time.standard for standard time and $time.military
// for military time
function tstandard(){

    var
        h = new Date(),
        hours = h.getHours(),
        minutes = h.getMinutes();

        minutes = ( minutes < 10 ? "0" : "" ) + minutes;

        var diem = ( hours < 12 ) ? "am" : "pm";

        hours = ( hours > 12 ) ? hours - 12 : hours;

        hours = ( hours == 0 ) ? 12 : hours;

        var string = hours + ":" + minutes + " " + diem;

        document.getElementById("tstandard").firstChild.nodeValue = string;

}

function tmilitary() {

    var
        h = new Date(),
        hours = h.getHours(),
        minutes = h.getMinutes();

        minutes = ( minutes < 10 ? "0" : "" ) + minutes;

        hours = ( hours == 0 ) ? 12 : hours;

        if(hours < 10) { hours = "0" + hours }

        var string = hours + ":" + minutes;

        document.getElementById("tmilitary").firstChild.nodeValue = string;

}

var $time = {

    standard: "<span id='tstandard'>&nbsp;</span>",
    military: "<span id='tmilitary'>&nbsp;</span>"

}

/*! universal body onload function !*/
window.onload = function(){

    mdy(); setInterval('mdy()', 1000);
            ymd(); setInterval('ymd()', 1000);

    tstandard(); setInterval('tstandard()', 1000);
    tmilitary(); setInterval('tmilitary()', 1000);

} 

そして、私のHTMLでは、次のことを行っています。

<script>document.write($date.mdy + " - " + $time.standard);</script> 
4

2 に答える 2

0

私はあなたがこれを望むかもしれないと思う:

document.getElementById('mdy').innerHTML = string;

またはこれ:

document.getElementById('mdy').nodeValue = string;

これの代わりに:

document.getElementById('mdy').firstChild.nodeValue = string;

それはエラーを処理するはずです。firstChild(呼び出しからを取得する必要はありませんgetElementById。デフォルトですでにノードが返されています。)

于 2012-10-26T22:19:24.587 に答える
0

DOM に 2 つのプレースホルダー要素を追加しています –<span id="ymd"></span><span id="tstandard">.

次に、window.onloadハンドラーで、これら 2 つのプレースホルダーだけでなく、DOM にない他の 2 つの要素 (id="ymd"およびid="tmilitary") のコンテンツも更新しようとしています。そのため、 document.getElementById('ymd')(and 'tmilitary') 呼び出しは正しく返されますundefined

ymdおよび関数の呼び出しを削除しtmilitaryます。

window.onload = function(){
  mdy();
  setInterval(mdy, 1000);

  tstandard();
  setInterval(tstandard, 1000);
};

setIntervalまた、単純化するために への呼び出しも変更しました。参照を渡す方が効率的で明確です。

于 2012-10-26T22:44:40.343 に答える