2012-06-25 33 views
-3

我有一個表單提交按鈕觸發功能。我們稱之爲ycClick()。我需要在提交後禁用此功能30秒,但我需要提交按鈕才能繼續工作。我不想要禁用整個按鈕,只是它觸發的功能。 (如果用戶在30秒前再次點擊按鈕,我需要再次提交,但不能再次執行ycClick()。)我嘗試了一百萬種不同的東西,但無濟於事。最後,我覺得我正在接近,但由於某種原因,它仍然無法正常工作。當我點擊它時,ycClick()根本沒有執行。我究竟做錯了什麼?下面是我的了:JavaScript定時器禁用功能

function ycClick(){ 
    ... 
} 



function toggleSubmit() { 
    if (document.getElementById('ycsubmit').onclick == null) { 
     document.getElementById('ycsubmit').onclick = ycClick(); 
    } else { 
     document.getElementById('ycsubmit').onclick = null; 
    } 
} 


function timer() 
{ 

    if (count <= 0 || count == null) 
    { 
    ycClick(); 
    } else { 
    count=30; 
    counter=setInterval("timer()",1000); 
    count=count-1; 
toggleSubmit(); 
} 
} 

<FORM ID="myform"> 
    <INPUT ID="ycsubmit" TYPE="SUBMIT" ONCLICK="timer();"> 
</FORM> 
+0

它究竟如何不工作?請明確點。 –

+0

@ CBredlow,請不要在問題中「修復」代碼。這可能是實際的問題。戈迪:你已經給你的輸入元素的ID「mysubmit」,但你指的是「ycsubmit」。 –

+0

我沒有更改代碼,我刪除了大寫字母。 – CBredlow

回答

1

這應該切換按鈕:

var isEnabled = true; 

function toggleSubmit() { 
    if (isEnabled) { 
     document.getElementById("ycsubmit").onclick = function() {}; 
    } else { 
     document.getElementById("ycsubmit").onclick = ycClick; 
    } 

    isEnabled = !isEnabled; 
} 

此外,當您使用setInterval你不需要括號或引號timer,像這樣:

counter=setInterval(timer,1000); 

更好的是,如果你想等待30秒,只需切換按鈕的功能,然後30秒後再做一次。

toggleSubmit(); 
setTimeout(toggleSubmit(), 30000); 
0

爲了詳細說明Incompl的回答是:

設置超時的功能時,它使用您提供的價值。從技術上講,你的setTimeout("timer()",1000);將做你想要的。

超時將評估「timer()」,類似於Eval()函數的工作方式。

但是,如果您不知情/缺乏經驗,執行某些操作(如setTimeout(toggleSubmit(), 30000);)會產生意想不到的結果。超時必須獲得所提供的值,在這種情況下,超時將調用toggleSubmit()函數,期望它返回一個值(不會)。所以,我們最終只調用兩次函數,超時沒有觸發函數。

爲了糾正這種情況,您必須避免在函數名稱後加上「()」。當你這樣做時,它作爲一個變量,它的值是函數內部的實際代碼。

這很好地爲您設置了setTimeout()功能的另一個功能。 setTimeout(toggleSubmit, 30000, "hello there", "sir");將調用toggleSubmit()函數並將提供參數「hello there」和「sir」。該函數實際上並不帶任何參數,所以它不會對它做任何事情,但是知道這是一件好事。