0

I need to call 2 functions onkeypress out of which first function is return type; and second function is not getting called but if use in reverse order it is working

Requirement:

OnKeyPress, the key should be validated. if number, accept the value in TextBox then copy the value into another textbox; If not a number, then do nothing

Correct Order but 2nd function is not getting called;

<input type="text" name="no_of_units" id="no_of_units" size="5" 
onkeypress="return isNumberKey(event);calc_exchange();">

In Reverse order both functions are working. I need the isNumberKey function to be called first.

<input type="text" name="no_of_units" id="no_of_units" size="5"
 onkeypress="calc_exchange();return isNumberKey(event);"

Functions :

function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57))
            return false;
         return true;
      }
function calc_exchange()
{
var raw1=document.getElementById("no_of_units").value;
document.getElementById("next_no_of_units").value=raw1;
}

I need the following order of function to be called;

  1. return isNumberKey(event)
  2. calc_exchange()
4

4 回答 4

3

您可以在按键上调用两个 javascript 函数,其中第一个函数是返回类型函数。

<input type="text" name="txtName" id="txtName" size="5" 
Onkeypress="return isNumberKey(event,this) && clickButton(event,'imgbtnSearch')">

使用 && 运算符,我们可以在按键上调用两个 javascript 函数。

于 2015-03-31T09:30:50.163 回答
2

调用return将执行它右边的内容然后退出,所以自然不会调用第二个函数。

如果不知道函数内部有什么,就很难回答。但我建议你使用 JavaScript 附加事件处理程序,而不是像你正在做的那样内联。这样,您将获得更多控制权。

在这里查看如何附加事件处理程序:http ://www.quirksmode.org/js/events_advanced.html

于 2013-01-20T12:54:49.967 回答
1

所以你不能在返回后调用任何东西,因此你可以试试这个。如果输入错误会引发警报。

<input type="text" name="no_of_units" id="no_of_units" size="5" 
onblur=calcexchange() onkeypress="isNumberKey(event)">
....
function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57))
            alert("Wrong I/P");
             evt.focus()
      }
于 2013-01-20T13:00:23.410 回答
0

return不必是第一个声明。只需按顺序调用函数,稍后返回结果。

<input type="text" name="no_of_units" id="no_of_units" size="5" 
onkeypress="var result = isNumberKey(event); calc_exchange(); return result;">

返回结果isNumberKey可能会阻止默认操作,如果返回 false,则输入将被忽略。看来您想防止非数字执行calc_exchange. 在这种情况下,如果输入不是数字,您应该只返回 false :

if(!isNumberKey(event)) { // validate input
  return false; // it's not a number, so prevent default action (do nothing)
}
calc_exchange(); // it was a number, copy the value

唯一的问题是,在您执行calc_exchange时,输入的数字尚未插入到文本框的值中。不过,您可以收听其他事件,例如用户输入完成时:

<input type="text" name="no_of_units" id="no_of_units" size="5" 
onkeypress="return isNumberKey(event);"
onchange="calc_exchange();" >
于 2013-01-20T12:55:08.690 回答