inArray()条件不会从正确的值触发

时间:2014-05-26 06:17:34

标签: javascript jquery keycode

我有一个仅限输入数字的功能,但我想扩展它,以便不会在箭头,退格和删除等关键输入上触发。我将这些密钥代码添加到数组中,并将event.keyCode传递给函数。

例如,退格键的代码是8,即使它在我的数组中,它也没有检测到它。同样,其他键(如字母)不在数组中,但函数允许它们。当我控制日志时,keyCode的整数似乎匹配。

这是我的代码的一小部分(以我的文本显示我的控制台日志):http://jsfiddle.net/h36ST/

jQuery('input').on('keyup', function(e){
    onlyNumbers( jQuery(this), e.keyCode );
});

function onlyNumbers(oThis, keycode) {    
    allowedKeys = [8, 37, 38, 39, 40, 46];

    if ( jQuery.inArray(keycode, allowedKeys) ) {
        return false;
    }

    jQuery(oThis).each(function(){
        this.value = this.value.replace(/[^0-9\.]/g,'');
    });
}

4 个答案:

答案 0 :(得分:3)

jQuery inArray返回索引。如果不存在,则返回-1。

if(jQuery.inArray(keycode, allowedKeys)!==-1){
    return;
}

答案 1 :(得分:1)

jQuery.inArray()返回一个索引。

  

描述:在数组中搜索指定的值并返回其索引(如果未找到,则返回-1)。

所以你的支票应该是这样的:

if(jQuery.inArray(keycode, allowedKeys) !== -1){
    return false;
}

这是一个很好的运算符~,它适用于这种检查。使用此代字号运算符,您的代码将如下所示:

if(~jQuery.inArray(keycode, allowedKeys)){
    return false;
}
  

波浪号反转了比特的顺序。逻辑是~N是 - (N + 1)。

以下是您的代码的updated JSFiddle

有关代字号(~)运算符的详细信息,请参阅here

答案 2 :(得分:1)

此代码将解决您在文本字段中使用箭头键导航时将获得的当前问题和未来问题,希望这会有所帮助

var allowedKeys = [8, 37, 38, 39, 40, 46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105];
jQuery('input').on('keydown', function(e){

var result = jQuery.inArray(e.keyCode, allowedKeys);
if ( result > -1 ) {
    jQuery('p.console').text(e.keyCode + ' is an acceptible non-numerical key.');
    return true;
} else {
    return false;        
}

});

Demo link

答案 3 :(得分:0)

我宁愿使用它。

if ( jQuery.inArray(keycode, allowedKeys)>-1 ) {
        jQuery('p.console').text(keycode + ' is an acceptible non-numerical key.');
        return false;
    }

FIDDLE