JQuery通过数组以某种方式通过引用进行循环

JQuery通过数组以某种方式通过引用进行循环,jquery,arrays,loops,for-loop,pass-by-reference,Jquery,Arrays,Loops,For Loop,Pass By Reference,所以我有一个非常简单的函数,它不起作用。它应该循环遍历一个导航名称数组,并使用导航名称作为参数将每个导航按钮与另一个函数的调用链接起来。出于某种原因,它正在链接每个按钮,以调用最后一个导航名称作为参数的函数。因此,无论你点击“演出”、“音乐”、“视频”等,它都会调用getPage(“联系人”)。我在想它是通过引用传递的,但我不知道如何或为什么 我在顶部实例化了数组: var navLinks=new数组('Blog','Gigs','Music','Videos','photo','Band',

所以我有一个非常简单的函数,它不起作用。它应该循环遍历一个导航名称数组,并使用导航名称作为参数将每个导航按钮与另一个函数的调用链接起来。出于某种原因,它正在链接每个按钮,以调用最后一个导航名称作为参数的函数。因此,无论你点击“演出”、“音乐”、“视频”等,它都会调用getPage(“联系人”)。我在想它是通过引用传递的,但我不知道如何或为什么

我在顶部实例化了数组:

var navLinks=new数组('Blog','Gigs','Music','Videos','photo','Band','Contact')

然后像这样运行它:

var foo;

// Add nav links
for(var i = 0; i < navLinks.length; i++) {

    $('#' + navLinks[i] + 'Nav');

    foo = "'" + navLinks[i] + "'";

    if( (page != 'Videos' && page != 'Photos') && (curPage != 'Videos' && curPage != 'Photos') )

        $('#' + navLinks[i] + 'Nav').click(function() { getPage( foo, 0) } );

    else

        $('#' + navLinks[i] + 'Nav').click(function() { getPage( foo, 1) } ); 

    $('#' + navLinks[i] + 'Nav').css('cursor', 'pointer');

} // End add nav links
var-foo;
//添加导航链接
对于(var i=0;i

我在做实验时把食物扔了进去。真正让人困惑的是,它确实链接了每个元素,所以它要遍历所有选项;当我在每次迭代中抛出一个检查foo的警报时,它会对所有单个选项发出警报。现在我很沮丧,谢谢你的帮助。

当你创建回调函数
function(){getPage(foo,1)}
时,你正在关闭
foo
变量,并且
foo
在你运行
for
循环时会发生变化,所以在调用回调时,
foo
的值是它在循环结束时的最后一个值

您需要通过调用函数来创建新的变量上下文。例如:

var foo;

function addHandler(i, foo, x){
   $('#' + navLinks[i] + 'Nav').click(function() { getPage( foo, x) });
}
// Add nav links
for(var i = 0; i < navLinks.length; i++) {
    $('#' + navLinks[i] + 'Nav');
    foo = "'" + navLinks[i] + "'";
    var x = (page != 'Videos' && page != 'Photos') && (curPage != 'Videos' && curPage != 'Photos') 
        ? 0 
        : 1
    addHandler(i, foo, x);

    $('#' + navLinks[i] + 'Nav').css('cursor', 'pointer');

} // End add nav links
var-foo;
函数addHandler(i,foo,x){
$('#'+navLinks[i]+'Nav')。单击(函数(){getPage(foo,x)});
}
//添加导航链接
对于(var i=0;i

因为调用addHandler会捕获其参数的值,而不是捕获变量本身,
addHandler
每次调用时都会捕获不同的变量。

看起来您在