函数内的全局变量不可用?

时间:2016-01-16 12:51:02

标签: javascript jquery

enter image description here

我正在根据http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html的内置搜索功能,使用handontable复制一个实时过滤器框。

现在我正在使用文档中最简单的用例(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();

(一个获取表格中当前数据的指法函数),其中包含全局“数据”(在顶部定义),供搜索工作。但是函数中的全局数据未定义。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果"全球"你所指的数据变量"在顶部"是这个

var
data = [
  ['Nissan', 2012, 'black', 'black'],
  ['Nissan', 2013, 'blue', 'blue'],
  ['Chrysler', 2014, 'yellow', 'black'],
  ['Volvo', 2015, 'yellow', 'gray']
]
那不是全球性的。该变量是DOMContentLoaded事件处理函数的本地变量。我假设即使你在同一个块中声明了其他事件处理程序,它们也会被调用不同的范围,使得该变量不可用。正如评论中所建议的那样,您可以将其分配给全局变量(如窗口),或者只在全局范围内声明它。