2011-11-09 108 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; 
} 
相关问题