2016-01-16 3 views
2

enter image description hereГлобальная переменная недоступна внутри функции?

Я работаю на воспроизводя поле живого фильтра с handsontable, основанный на встроенной функции поиска в http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html.

Сейчас я работаю с простейшим вариантом использования (http://jsfiddle.net/kc11/uL3L4teL/) из документов.

Как объяснено в документации, в этом коде, если ввести строку поиска, вы получите соответствующие клетки, выводимые на консоль с помощью следующей функции:

  Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) { 
       var queryResult = hot.search.query(this.value); 

       console.log(queryResult); 
       hot.render(); 

Я хочу, чтобы захватить строки в данном массив, который соответствует строке поиска и фильтрует исходные данные «данные» в строке поиска, прежде чем перерисовывать таблицу. Это частично работает с использованием:

Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) { 
    var queryResult = hot.search.query(this.value); 

    console.log(queryResult); 
    rows = getRowsFromObjects(queryResult); 
    console.log('hot', hot.getData()); 
    console.log('data', data); 
    var data = hot.getData(); 
    var filtered = data.filter(function(d, ix) { return rows.indexOf(ix) >= 0; }); 
    console.log('filtered', filtered); 

    hot.loadData(filtered); 


}); 

Как вы можете видеть в http://jsfiddle.net/uL3L4teL/2/, но мне нужно заменить

var data = hot.getData(); 

(а handsontable функции, которая получает текущие данные в таблице) с глобальными «данными» (определяется вверху) для поиска работы. Но глобальные данные не определены в функции. Как я могу это исправить?

+1

'var data;' поднимается вверх, а переменная будет неопределенной, пока не будет достигнута линия 'data = hot.getData()'. Используйте другое имя переменной или 'window.data', если это глобальная переменная. –

+0

Возможный дубликат [Удивлен, что глобальная переменная имеет неопределенное значение в JavaScript] (http://stackoverflow.com/questions/9085839/surprised-that-global-variable-has-undefined-value-in-javascript) – JJJ

ответ

0

Если «глобальные» переменные данные, которые вы имеете в виде «наверху» это один

var 
data = [ 
    ['Nissan', 2012, 'black', 'black'], 
    ['Nissan', 2013, 'blue', 'blue'], 
    ['Chrysler', 2014, 'yellow', 'black'], 
    ['Volvo', 2015, 'yellow', 'gray'] 
] 

то, что не является глобальным. Эта переменная локальна для функции обработчика событий DOMContentLoaded. Я предполагаю, что даже если вы объявляете другие обработчики событий в этом же блоке, они вызываются с другой областью, что делает эту переменную недоступной. Как было предложено в комментарии, вы можете назначить его глобальной переменной, например, окну, или просто объявить ее в глобальной области.

+0

Спасибо за объяснение что. – user61629

+0

Это неправда. Он * * в той же области, но, как объясняет Нит в комментариях, есть еще одна переменная с тем же именем, которая затеняет «глобальную» переменную. – JJJ

+0

Юхана верна, var data = hot.getData(); затеняет переменную данных, о которой я упоминал в своем ответе. –

Смежные вопросы