'длина' равна нулю или не является объектом в IE при использовании inArray в jQuery - PullRequest
1 голос
/ 23 июля 2011

Я использую 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 голосов
/ 02 ноября 2011

Я думаю, ваша проблема связана с еще одной ошибкой jKey . Проверьте, пожалуйста, мой ответ - вы должны использовать массив как обход в вашей реализации вместо связанного.

...