我试图在单个事件上调用两个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;
}
出于调试目的,sencond函数只有一行。
function calculate()
{
alert("ok");
}
现在,第一个函数被称为100%ok。但第二个功能似乎没有被调用。有什么建议吗?
编辑:我想在执行第一个函数后调用第二个函数。
答案 0 :(得分:4)
因为您在第一次通话后返回。
如果你想跳过第二个,如果第一个返回false:
onkeypress="if (isNumberKey(event)) { calculate(); return true; } else { return false; }"
如果两者都要返回状态,则第二个只应在第一个返回true时运行:
onkeypress="return isNumberKey(event) && calculate();"
答案 1 :(得分: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文件等静态资源,因此限制了带宽使用并加快了网站的速度。
答案 2 :(得分:1)
onkeypress="var r = isNumberKey(event);calculate();return r;"
答案 3 :(得分:1)
在事件返回后调用第二个函数。口译员永远无法联系到它。改为
var isNumber = isNumberKey(evt);calculate(); return isNumber;
修复了这个特定问题,但是你会遇到跨浏览器问题和突兀的代码来处理
答案 4 :(得分:0)
return
将结束您所使用的任何功能(包括onclick
属性生成的匿名功能。)
您可能需要以下内容:
var value = isNumberKey(event);
calculate();
return value;
或
onclick="var value = isNumberKey(event);calculate();return value;"
答案 5 :(得分:0)
由于你有一个return语句,所以不会达到第二个语句。
最好有一个处理函数然后调度到更多函数,例如
onkeypress事件= myonkeypress
function myonkeypress() {
if (isNumberKey()) {
calculate();
}
}
答案 6 :(得分:-1)
我建议将alert()调用放在您尝试调试的函数中。
由于它仅用于调试,因此一旦完成调试,它就会减少清理代码:您只需删除警报语句,而不必担心其他任何问题(即从中删除额外的函数调用)你的onkeypress活动。
所以你可以摆脱你的calculate()函数,只需更新你的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;
}