我如何结合2个onkeydown函数?

时间:2016-01-08 23:11:53

标签: javascript

如何组合以下内容,以便两者都执行?我想限制字母数字,同时允许输入转换为单元格上的制表符。

功能1:

var specialKeys = new Array();
specialKeys.push(8,46); //Backspace
function IsNumeric(e) {
    var keyCode = e.which ? e.which : e.keyCode;
    if(keyCode == 9 )return true;
    var ret = ((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1);
    return ret;
}

功能2:

function tabE(obj, e) {
        var e = (typeof event != 'undefined') ? window.event : e; // IE : Moz 
        if (e.keyCode == 13) {
            var ele = document.forms[0].elements;
            for (var i = 0; i < ele.length; i++) {
                var q = (i == ele.length - 1) ? 0 : i + 1; // if last element : if any other 
                if (obj == ele[i]) {
                    ele[q].focus();
                    break
                }
            }
            return false;
        }
    }

调用第一个函数:

onkeypress="return IsNumeric(event) tabE(this,event);"

调用第二个函数

onkeypress="return tabE(this,event)"

我尝试在输入键到标签功能上使用“onkeyup”,但它失败了 有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的内联处理程序中的代码无法编译,在两次调用之间添加&&。如果第一个函数返回false

,这将确保不调用第二个函数

onkeypress="return IsNumeric(event) && tabE(this,event);"

...但您应该从JavaScript, not html attributes

设置处理程序

答案 1 :(得分:0)

如果您坚持在HTML中设置事件处理程序,则可以使用逗号运算符 - 如果您有两个用逗号分隔的表达式(如(x + 1), (y + 5)中所示),JavaScript将评估其中一个并返回最后一个。使它在JavaScript中如此有用的原因在于将几乎任何东西(包括函数调用)转换为表达式都非常容易(因为当省略undefined语句时函数返回return)。

所以,在你的情况下:

onkeypress = "return IsNumeric(event), tabE(this,event);"

但正如胡安所说,这有点笨拙,如果你用addEventListener()代替它会更清洁。