2011-12-15 5 views
-3

この関数は、ページに費やした時間をdivに書き込む必要があります。 これはwindow.onbeforeunloadアラートでうまくいきました。素敵なワーキングアルゴリズムと作業axempleとして 私のonloadハンドラが動作しないのはなぜですか?

<script> 
function tempo1() { 
    var d1 = new Date(); 
    var t_day = d1.getDate(); 
    var t_hour = d1.getHours(); 
    var t_min = d1.getMinutes(); 
    var t_sec = d1.getSeconds(); 
    alert("Started at--> " + t_day + "days, " + t_hour + ":" + t_min + ":" + t_sec); 

    function tempo2() { 
     var d2 = new Date(); 
     var t_day2 = d2.getDate(); 
     var t_hour2 = d2.getHours(); 
     var t_min2 = d2.getMinutes(); 
     var t_sec2 = d2.getSeconds(); 
     var day = t_day2 - t_day; 
     var hour = t_hour2 - t_hour; 
     var min = t_min2 - t_min; 
     var sec = t_sec2 - t_sec; 
     document.getElementById('timespent').innerHTML = "Total--> '+day+'days, '+hour+':'+min+':'+sec"; 
    } 
    setInterval(tempo2(), 500); 
} 
window.onload = tempo1(); 
</script> 

<div id="timespent">??days, ??:??:??</div> 

:ライン

window.onload = tempo1(); 

<script> 
startTime = new Date(); 
clockStart = startTime.getTime(); 
function initStopwatch() { 
var NewTime = new Date(); 
return((NewTime.getTime() - clockStart)/1000); 
} 
function getSecs() { 
var tSecs = Math.round(initStopwatch()); 
var iSecs = tSecs % 60; 
var iMins = Math.round((tSecs-30)/60); 
var sSecs ="" + ((iSecs > 9) ? iSecs : "0" + iSecs); 
var sMins ="" + ((iMins > 9) ? iMins : "0" + iMins); 
document.getElementById('timespent').innerHTML = sMins+":"+sSecs; 
window.setTimeout(getSecs,1000); 
} 
window.onload=getSecs; 
</script> 

<div id=timespent></div> 

答えて

6

...あなたはtempo1関数を呼び出すと、割り当てています戻り値はloadイベントwindowにあります。 正確にはx = foo();と同じです。fooが呼び出され、戻り値はxに格納されます。関数のリファレンスを割り当て

window.onload = tempo1; 

を...、そうloadイベントが発生したときに、それが呼び出されます:

あなたはそれらの()をしたくない、あなただけしたいです。

同様に、Graham points outとして、後でものと同じ種類のをやっている:

setInterval(tempo2, 500); 

2番目のエラーがこの行に、もありますする必要があります

setInterval(tempo2(), 500); 

document.getElementById('timespent').innerHTML = "Total--> '+day+'days, '+hour+':'+min+':'+sec"; 

ここでは、二重引用符()を使用して文字列を引用しています3210)、dayshourmin、およびsecの変数に代入しようとすると、の単一引用符が使用されています。文字列の開始と終了に使用する引用符について一貫性を持たせる必要があります。どちらの罰金ですが、1を選択する必要があり、そのいずれかのすべてのダブルス:

document.getElementById('timespent').innerHTML = "Total--> "+day+"days, "+hour+":"+min+":"+sec"; 

または全てシングル:あなたはloadイベントを待つ必要はありません

document.getElementById('timespent').innerHTML = 'Total--> '+day+'days, '+hour+':'+min+':'+sec'; 

注意しかし、。スクリプトをページの末尾に置いた場合(以下、)、「タイムペイント」div   —の場合は、直接tempo1に電話をかけることができます。 オブジェクトのloadイベントは、すべての外部リソース(すべてのイメージを含む)がロードされた後で、ページロードサイクルの最後で非常にと発生します。それがあなたが望むものなら、偉大だが、もしそうでなければ、あなたには別の選択肢がある。

参考:上記の答えにさらに

+0

絶対に – jony

+0

でも、divの中には「Total - > '+ day +' days、 '+ hour +': '+ min +': '+ sec」しか表示されません。その実際の値が欠けている.. – jony

+0

@ジョニー:それはコード内の無関係なエラーです、私は私の答えを更新しました。これらのことの最善の策は、 'x = foo();'の例のように、実際にコードを見て、それが何をしているのかを理解することです。 –

3

、また、あなたの第2の機能を実行するのではなく、直接setIntervalにそれを渡しています。 Do

setInterval(tempo2, 500); 

これは0.5秒ごとに実行されます。

+0

+1、それを逃した。 –

+0

絶対に正しいですが、私はまだ学んでいますので、時々そのようなことを逃す – jony