我正在尝试创建一个数组,然后在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。
答案 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
});
经验教训,感谢大家的评论。我为任何困惑道歉,特别是对我而言;)。现在,如果有人能够改进这个答案,那么我会给你解决问题的功劳。我只是想分享我的结论。但是,再次,如果你发现它有用......