function showConfirm(reArray) {
var theHTML = '';
var optionArray = ["Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6", "Option 7"];
var myButtons = {};
var j = 1;
for(var i = 0; i < reArray.length; i++){
theHTML +='<div style="text-align:center">'
+ '<span>'+j+'.</span> '
+ '<span>'+reArray[i].RoadNo+'</span> '
+ '<span>'+compass_image(reArray[i].Bearing)+'</span> '
+ '</div><br/>'
j++;
}
for(i = 0; i < reArray.length; i++){
ERROR HERE -----> var placeFunction = function(reArray[i]){
plotRoadInfo(reArray[i]);
$(this).dialog("close");
};
myButtons[optionArray[i]] = placeFunction;
}
$( "#dialog-modal" ).dialog({
height: 300,
modal: true,
buttons: myButtons
});
$('#multipleRE').append(theHTML);
}
因此函数传递一个对象数组(reArray),然后为jquery对话框创建一个按钮数组(myButtons)。我试图将reArray [i]传递给每个按钮使用的函数,即执行plotRoadInfo(reArray [i]);
我不断得到“意外的令牌[”,我无法弄清楚为什么会这样。
答案 0 :(得分:3)
您没有在JavaScript中指定参数的类型,只需使用该名称,然后将其用作函数中的数组。
var placeFunction = function(reArray){
plotRoadInfo(reArray[i]);
$(this).dialog("close");
};
我认为您甚至不需要指定它,因为您指的是内部函数可以访问的数组。
var placeFunction = function() {
plotRoadInfo(reArray[i]);
$(this).dialog("close");
};
正如Pointy所指出的那样,这将涉及共享i
变量的问题,因此每个函数都会引用reArray[reArray.length]
,因为循环将在i === reArray.length
时完成。解决此问题的常用方法是调用一个接受i
作为返回函数的参数的函数。
var placeFunction = (function (item) {
return function() {
plotRoadInfo(item);
$(this).dialog("close");
};
}(reArray[i]));
阅读闭包,深入了解其工作原理。 Here is another example发生了这种情况。
答案 1 :(得分:2)
您的语法不正确。
我相信你想做的是以下几点:
var placeFunction =
(function(arrayitem){
return function(){
plotRoadInfo(arrayitem);
$(this).dialog("close");
};
})(reArray[i]);
myButtons[optionArray[i]] = placeFunction;
答案 2 :(得分:1)
为什么参数有索引?
function(reArray[i])
你是说吗?
function(reArray)