2017-03-24 17 views
-2

カウントダウンするタイマーを作成しようとしていますが、ボタンをクリックすると停止します。私が変更したhereからコードをオンラインにしましたが、jQueryのポストメソッドを呼び出そうとすると不正な呼び出しエラーが発生します。私はそれが範囲の問題だとはっきりと確信していますが、私はその周りの最善の方法を確信していません。私の変更されたコードは以下の通りです。オブジェクト内からjQueryを呼び出す

var timer={ 
 

 
init:function(id){ 
 
    this[id]={ 
 
    obj:document.getElementById(id) 
 
    } 
 
}, 
 

 
start:function(id){ 
 
    var obj=this[id]; 
 
    obj.srt=new Date(); 
 
    clearTimeout(obj.to); 
 
    this.tick(id); 
 
    $("#climbTimer").unbind(); 
 
    $('#climbTimer').click(function(){timer.finalStop('climbTimer'); return false;}); 
 
    
 
    if ($('#'+id).html().indexOf('Start') != -1) 
 
     $('#'+id).html('Stop Ascend<br><span id="elapsedTime">0.00</span>'); 
 
}, 
 

 
stop:function(id){ 
 
    \t clearTimeout(this[id].to); 
 
}, 
 
    
 
finalStop:function(id){ 
 
\t clearTimeout(this[id].to); 
 
\t 
 
\t $.post('php/climbTime.php', {team: document.getElementById('team').value, roundNum: document.getElementById('round').value, time: document.getElementById('elapsedTime')}); 
 
}, 
 

 
tick:function(id){ 
 
    this.stop(id); 
 
    var obj=this[id],sec=(new Date()-obj.srt)/1000,min=Math.floor(sec/60),sec=sec%60; 
 
    $('#elapsedTime').html(sec>9?sec:''+sec); 
 
    obj.to=setTimeout(function(){ timer.tick(id); },100); 
 
} 
 
    
 
\t 
 
}

+0

表示されるエラーメッセージの詳細について教えてください。 – amphetamachine

+2

'timer.finalStop( 'climbTimer')の代わりに' timer.finalStop(id); 'を実行する必要があります。また、非推奨の '.unbind()'ではなく '.off( 'click')'を使用する方が良いでしょう。 – trincot

答えて

3

いくつかの問題:

  • document.getElementById('elapsedTime')$.postにオブジェクトのプロパティ値として渡されます。これは、DOMオブジェクトである、とjQueryは、それをシリアル化しようとしているすべてのプロパティにアクセスします。それは間違いにつながります。代わりにあなたがtextContentプロパティを取得する必要があります

    $.post('php/climbTime.php', { 
        team: document.getElementById('team').value, 
        roundNum: document.getElementById('round').value, 
        time: document.getElementById('elapsedTime').textContent // <--- 
    }); 
    
  • をあなたはtimer.finalStop('climbTimer')を呼ぶが、それはあなたのボタンの名前ではなく、あなたとあなたのタイマーを開始するために使用されるIDです。あなたは実行する必要があります。

    timer.finalStop(id); 
    

あなたが適切にあなたのコードをインデントする場合、私はまた、後者は最後のjQuery 1.7

で廃止されましたように、あなたがより良いスポットエラーことができます.off('click')の代わり.unbind()を使用することをお勧めします長い1ライナーは避けてください。 valueプロパティが長い行の右端に表示されませんでした。

+0

助けてくれてありがとう。欠落値のプロパティは見ていませんでしたが、実際には、それは私が望む値ではなく、elapsedTimeがスパンであったためにHTMLのコンテンツであることを認識しました。 –

+0

あなたを歓迎します;-)あなたのコードで生成されたスパンです。注:テキストを扱う際に '.textContent'を' .innerHTML'よりも使用する方が良いでしょう。そうしないと、 ' '、 '&'というようなものが出るかもしれません。 – trincot

関連する問題