使用jQuery的inArray时,'length'为null或不是IE中的对象

时间:2011-07-22 22:47:33

标签: javascript jquery internet-explorer jkey

我正在使用jKey,但在IE8中我收到此错误:

'length' is null or not an object

每当我按某些键时。似乎每当我按下一个尚不存在的密钥时(如果我从未为a设置任何内容,则会出现错误消息)。但是,我确实为enter设置了一个关键命令,但它仍在执行它。

导致错误的问题是:

 if($.inArray(e.keyCode,keySplit[x]) > -1){
  // Initiate the active variable
  var active = 'unchecked';

  // All the individual keys in the combo with the keys that are currently being pressed
  for(y in keySplit[x]) {
   if(active != false) {
    if($.inArray(keySplit[x][y], activeKeys) > -1){
     active = true;
    }
    else {
     active = false;
    }
   }
  }

错误发生在第一行。知道keySplit[x]在没有任何内容时返回typeof number或者密钥快捷方式只是一个密钥,我补充道:

if(typeof(keySplit[x]) == 'number'){ keySplit[x] = [keySplit[x]]; }

在上面的代码块正上方。

之后它在Chrome和FF中工作,但仍然不是IE。我也尝试过:

if(typeof(keySplit[x]) == 'number'){ keySplit[x] = new Array(keySplit[x]); }
if(typeof(keySplit[x]) == 'number'){ keySplit[x] = [keySplit[x].toString()]; }
if(typeof(keySplit[x]) == 'number'){ keySplit[x] = new Object(keySplit[x]); }

但它们都没有工作。导致错误的jQuery代码是:

inArray: function( elem, array ) {

    if ( indexOf ) {
        return indexOf.call( array, elem );
    }

    for ( var i = 0, length = array.length; i < length; i++ ) {
        if ( array[ i ] === elem ) {
            return i;
        }
    }

    return -1;
},

1 个答案:

答案 0 :(得分:0)

我认为,您的问题与 another jKey bug 有关。请检查我的 answer - 你应该在你的实现中使用数组,例如遍历而不是关联。