Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数正在使用循环中最后一个已知的参数?_Javascript_Jquery_Loops - Fatal编程技术网

Javascript函数正在使用循环中最后一个已知的参数?

Javascript函数正在使用循环中最后一个已知的参数?,javascript,jquery,loops,Javascript,Jquery,Loops,在这种情况下,我需要动态创建按钮,并且需要将onclick事件附加到每个按钮上。 所有这些都做得很好。但是,单击其中一个按钮时,调用的函数即(animate(poly,map))使用poly和map的最后一个已知值作为参数。 从今天早上起我就一直在处理这个问题。 请帮忙。谢谢 for(var k=0;k<arr_altern.length;k++){ my_div=create_div_interchange(arr[i],1,78,visited_bus,interch

在这种情况下,我需要动态创建按钮,并且需要将onclick事件附加到每个按钮上。 所有这些都做得很好。但是,单击其中一个按钮时,调用的函数即(animate(poly,map))使用poly和map的最后一个已知值作为参数。 从今天早上起我就一直在处理这个问题。 请帮忙。谢谢

for(var k=0;k<arr_altern.length;k++){
         my_div=create_div_interchange(arr[i],1,78,visited_bus,interchange_arr,arr_altern[k],null, my_interchange_array);

        $('#results').append(my_div);
        var x='animate';
        var v='#animater';
        v+=div_id;
        x+=div_id;
        map=create_map(div_id);
        var poly=retrieve_results_edges(bus_stops_visited,map);

        var strVar="";
        strVar += "<span class=\"animate\">";
        strVar += "<input type=\"button\"  id="+x+" name=\"animate\"  value=\"Animate\" \/>";
        strVar += "<\/span>";


        $(v).append(strVar);



        document.getElementById(x).onclick=function test(){

                animate(poly,map);

     }

     set_map(map);


    set_polyline_color(my_traversed_edge,map);

        }

$('#'+x).bind('click',{poly:poly,map:map}, function(event) {
             animate(event.data.poly,event.data.map)
      });

尝试使用自调用

(function (x, poly, map) {

     document.getElementById(x).onclick=function test(){

                animate(poly,map);

     }


})(x, poly, map);

您在声明
map
变量时没有
var
关键字,因此它是在全局范围内创建的,因此只有一个
map
变量在每个循环上获得其值

for(var k=0;k<arr_altern.length;k++){
    (function (k) {
        my_div=create_div_interchange(arr[i],1,78,visited_bus,interchange_arr,arr_altern[k],null, my_interchange_array);

        $('#results').append(my_div);
        var x      = 'animate' + div_id,
            v      = '#animater' + div_id,
            map    = create_map(div_id),
            poly   = retrieve_results_edges(bus_stops_visited, map),
            strVar = '<span class="animate"><input type="button"  id="' + x + '" name="animate"  value="Animate" /><\/span>';

        $(v).append(strVar);

        document.getElementById(x).onclick=function test(){

            animate(poly,map);

        }

        set_map(map);


        set_polyline_color(my_traversed_edge,map);
    })(k);
}

您可以使用jQuery代理

var buttons = $("a");
for (var i = 0; i < buttons.length; i++){
  $(buttons[i]).unbind("click").click(
    $.proxy(
      function(){
        alert(this);
        return false;
      },
      i
    )
  );
}
var按钮=$(“a”);
对于(变量i=0;i
或者通过创建新函数来捕获参数

var buttons = $("a");
for (var i = 0; i < buttons.length; i++){
  $(buttons[i]).unbind("click").click(
    function(arg){
      return function(){
        alert(arg);
        return false;
      };
    }(i)
  );
}
var按钮=$(“a”);
对于(变量i=0;i

只需在firebug控制台中运行其中一个示例即可查看效果。

问题在于,您一直在设置同一变量的值(在
map
的情况下是全局属性),稍后将访问该变量。代码中只有一个名为
map
的变量和一个名为
poly
的变量。请在StackOverflow中搜索“javascript最后一个值循环”,这将导致出现错误的示例,以及如何更正错误。是的,当然,您正在整个循环中更改poly和map的值,最后一个值将保持不变。你需要分别存储每个按钮的按钮,,,等等。选择一个。好的,找到了一个非常好的“简单”的例子:你有一个语法错误
$(#results)。append(my_div)
,缺少
是的,但是为什么?它如何改变情况?@pst通过将变量作为参数传递给函数,并立即调用它,可以将变量的当前值绑定(复制)到该函数的作用域。JavaScript只具有函数作用域,而不具有块作用域。@paisle您不传递变量;-)[nit,nit,只是想找出这个答案]我找到了解决方案。我使用了JQuery绑定方法。谢谢所有建议!@pst我喜欢精确性。请问,一个通过了什么?
var buttons = $("a");
for (var i = 0; i < buttons.length; i++){
  $(buttons[i]).unbind("click").click(
    $.proxy(
      function(){
        alert(this);
        return false;
      },
      i
    )
  );
}
var buttons = $("a");
for (var i = 0; i < buttons.length; i++){
  $(buttons[i]).unbind("click").click(
    function(arg){
      return function(){
        alert(arg);
        return false;
      };
    }(i)
  );
}