Jquery / JavaScript的Strange Array Scope问题

时间:2014-06-03 17:11:36

标签: javascript jquery arrays

我正在尝试创建一个数组,然后在mouseup()上用数据填充它,然后使用控制台中的一个jquery slider模块向下访问它,如下所示:

day_range = new Array();

$( "#slider-range" ).slider({
          orientation: "vertical",
          range: true,
          values: [ 30, 45 ],
          slide: function( event, ui ) {
            $( "#amount" ).val(ui.values[ 0 ] + " - " + ui.values[ 1 ]+" Days" );
            beginDay = ui.values[ 0 ];
            endDay = ui.values[ 1 ]             
          }
});
$( "#amount" ).val($( "#slider-range" ).slider( "values", 0 ) +
          " - " + $( "#slider-range" ).slider( "values", 1 ) +" Days" );

$(".ui-slider-handle").mouseup(function(){
  day_range.length = 0;

  day_range.push(beginDay, endDay);     
});

console.log(day_range);

问题:在FF中,我可以在加载时看到空数组,并显示消息“没有子对象”。这对我来说很奇怪,因为我创建了一个数组上游流而不是一个对象数组,除非这是自动完成的。现在,当我移动滑块时,我看到我的数组填充在FF中,但不在Chrome中。当我尝试使用:

访问索引时
console.log(day_range[0]);

两者都未定义。我觉得这可能是一个微不足道的问题,我犯了一个愚蠢的错误,但我在这个具体问题上找不到任何东西。在审核Jquery scope documentation时,看起来我正在做的是正确的。以下是jsFiddle中的代码。但是,显然缺少某些东西。我做错了什么?

提前致谢。如果您访问jsFiddle时可能会有所帮助,您可以在浏览器中打开js日志以查看发生的情况。特别是在FF。

1 个答案:

答案 0 :(得分:1)

我们知道如果你创建一个关于嵌套函数的全局变量,你可以在嵌套函数中修改该变量,然后在下游看到更改的变量。像这样:

function main(){
  var a = 1;
  function one(){
     a = a + 2;
  } 
  one();
  console.log(a); // a = 3
}

我认为有可能以同样的方式访问基于事件的功能,并且无法执行此操作。实现我想要的唯一方法就是这样做:

$(".ui-slider-handle").mouseup(function(){
  day_range.length = 0;

  day_range.push(beginDay, endDay);  
  console.log(day_range[0]);

  //more code here like an ajax call etc
});

经验教训,感谢大家的评论。我为任何困惑道歉,特别是对我而言;)。现在,如果有人能够改进这个答案,那么我会给你解决问题的功劳。我只是想分享我的结论。但是,再次,如果你发现它有用......