2010-12-20 6 views
1

htmlで、ボタンを作っています。 ボタンは1秒間に1回クリックする必要があります。 私はjavascript、keep buttonファーストクリック〜

ので、私のコードはここに

inputTooFast = function() 
{ 
    var curDate = new Date(); 
    if(curDate.getHours() == this.lastinputtime[0]) 
     if(curDate.getMinutes() == this.lastinputtime[1]) 
      if(curDate.getSeconds() == this.lastinputtime[2]) 
       if((curDate.getMilliseconds() - this.lastinputtime[2]) < 999) 
       { 
        this.lastinputtime[0] = curDate.getHours(); 
        this.lastinputtime[1] = curDate.getMinutes(); 
        this.lastinputtime[2] = curDate.getSeconds(); 
        this.lastinputtime[3] = curDate.getMilliseconds(); 
        return true; 
       } 
    this.lastinputtime[0] = curDate.getHours(); 
    this.lastinputtime[1] = curDate.getMinutes(); 
    this.lastinputtime[2] = curDate.getSeconds(); 
    this.lastinputtime[3] = curDate.getMilliseconds(); 
    return false; 
} 

と使用例です〜高速のボタンクリックを許可したくないので、実行する任意の高速化や、より良い解決策があり、ここで

function sendMessage() 
{ 
    if(theObj.inputTooFast()==true) 
     return; 

... 
    some valid code here 
... 

} 

されますこの? jqueryを使用しています。

+0

通常、チャット送信ボタンはこの機能を使用します〜 –

+1

〜、私はちょうど答えを受け入れる方法を知らなかった。あなたの質問で、私はそれを発見した〜ありがとう〜 –

答えて

4

ボタンをクリックできないというユーザーのご意見をお送りしていないようです。ユーザーからのフィードバック(通常は良いアイデアを)与えたい場合は、(このようなボタンを無効

sendMsg.blocked = 0; 
function sendMsg() { 
    if (sendMsg.blocked == 0) { 
     ++sendMsg.blocked; 
     setTimeout(removeSendMsgBlock, 1000); // If you want one second 

     // ...other processing 
    } 
} 
function removeSendMsgBlock() { 
    --sendMsg.blocked; 
} 

:もしそうなら、私はおそらく、この(live example)(ない場合は、下記を参照)のような何かをしたいですlive example):

btnSendMsg = /* ...get the button element... */; 
function sendMsg() { 
    btnSendMsg.disabled = true; 
    setTimeout(removeSendMsgBlock, 1000); // If you want one second 

    // ...other processing 
    display("Sending message at " + new Date()); 
} 
function removeSendMsgBlock() { 
    btnSendMsg.disabled = false; 
} 

更新:実際には、余分なシンボルのための必要はありません、あまりにもsendMsg関数オブジェクトのremove関数のリファレンスを置く:

リワーク

例1:

sendMsg.blocked = 0; 
function sendMsg() { 
    if (sendMsg.blocked == 0) { 
     ++sendMsg.blocked; 
     setTimeout(sendMsg.removeBlock, 1000); // If you want one second 

     // ...other processing 
    } 
} 
sendMsg.removeBlock = function() { 
    --sendMsg.blocked; 
}; 

例リワーク2:

btnSendMsg = /* ...get the button element... */; 
function sendMsg() { 
    btnSendMsg.disabled = true; 
    setTimeout(sendMsg.removeBlock, 1000); // If you want one second 

    // ...other processing 
    display("Sending message at " + new Date()); 
} 
sendMsg.removeBlock = function() { 
    btnSendMsg.disabled = false; 
}; 
+0

うわー、良い仕事!ありがとう〜 –

2

アレイにこれらのフィールドを格納する必要はありません。あなたがDateとしてそれらを保存したり、することができますあなただけ後で数値比較のためにそれを使用しているので、私はここで行うことにしましたnumber、など:

inputTooFast = function() { 
    return (new Date()).getTime() - this.lastInputTime < 1000; 
} 

注意これはfalseを返した場合、あなたは続けること、 lastInputTimeを保存する必要があります。