2011-11-09 119 views
1

我想在單個事件上調用兩個javascript函數。這是我的函數調用代碼。爲什麼第二個javascript函數沒有被調用?

<input type="text" name="cbh" id="c8" value="0" onkeypress="return isNumberKey(event);calculate();" /> 

第一個功能只允許數字,它有以下工作流程。

function isNumberKey(evt) 
{ 
    var charCode = (evt.which) ? evt.which : event.keyCode 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
    return false; 



    return true; 
} 

爲了調試目的,第二個函數只有一行。

function calculate() 
{ 
    alert("ok"); 

} 

現在,第一個函數被稱爲100%ok。但第二個功能似乎並沒有被調用。有什麼建議麼?

編輯:我想在第一個函數執行後調用第二個函數。

回答

4

因爲您在第一次通話後正在返回。

如果你想跳過第二個如果第一個返回false:

onkeypress="if (isNumberKey(event)) { calculate(); return true; } else { return false; }" 

如果兩者都返回狀態,而第二隻運行,如果第一個返回true:

onkeypress="return isNumberKey(event) && calculate();" 
+0

感謝的人,它的工作我都可以接受十點以後你作爲應答響應分鐘 :) –

0

return將結束您所在的任何功能(包括由onclick屬性生成的匿名功能)。

你可能想是這樣的:

var value = isNumberKey(event); 
calculate(); 
return value; 

onclick="var value = isNumberKey(event);calculate();return value;" 
2

您從onkeypress處理程序返回調用的第一個函數後立即:

onkeypress="return isNumberKey(event);calculate();" 

在javascript中的一切,遵循return語句被忽略。所以,你想要的這裏是有首先檢測如果該參數是一個數字和計算功能:

function handlePress(evt) { 
    var result = isNumberKey(evt); 
    calculate(); 
    return result; 
} 

然後:

onkeypress="return handlePress(event);" 

你可以在HTML直接寫這邏輯沒有引入第三個功能,但是,恕我直言混合HTML和JavaScript這樣做是不好的。我甚至會附上這個onkeypress事件事件悄悄地使用,而不是在輸入onkeypress屬性:

window.onload = function() { 
    var c8 = document.getElementById('c8'); 
    if (c8 != null) { 
     c8.onkeypress = function(evt) { 
      var result = isNumberKey(evt); 
      calculate(); 
      return result; 
     }; 
    } 
}; 

,並在html:

<input type="text" name="cbh" id="c8" value="0" /> 

現在我們有JavaScript和標記之間的明確分離。這樣做的另一個好處是您的標記大小會減少,並且由於靜態資源(如JavaScript文件)被緩存,您將限制帶寬使用並加速您的網站。

1
onkeypress="var r = isNumberKey(event);calculate();return r;" 
0

既然你有一個return語句,第二個語句將不會被達到。

你會更好,有一個處理函數,然後派遣到更多的功能,e.g

onkeypress事件= myonkeypress

function myonkeypress() { 
    if (isNumberKey()) { 
    calculate(); 
    } 
} 
1

第二功能的情況下返回後調用。口譯員永遠不會接觸到它。更改爲

var isNumber = isNumberKey(evt);calculate(); return isNumber; 

修復特定的問題,但你必須跨瀏覽器的問題,突兀的代碼來處理

-1

我建議把你試圖調試函數內部的警報()調用。

因爲它只用於調試,所以一旦完成調試,它就會減少代碼的清理次數:只需要刪除警報語句,而不必擔心其他任何事情(即刪除額外的函數調用從

所以你onkeypress事件事件中,你可以擺脫你的計算()函數,只需更新您的isNumberKey功能,像這樣:

function isNumberKey(evt) 
{ 
    var charCode = (evt.which) ? evt.which : event.keyCode 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
    { 
     alert("isNumberKey FALSE"); 
     return false; 
    } 

    alert("isNumberKey TRUE"); 
    return true; 
} 
相關問題