JavaScript中的意外参数值
我很难理解这里出了什么问题。我从数据库中获取一个事件列表,并尝试创建一个自定义列表来显示它们,使用回调onclick方法。我得到了正确的值,我正确地显示了它们,但是onClick方法得到的是最后一个项目ID的值,而不是它自己的值 因此,如果我点击列表中的任何项目,我的警报会显示JavaScript中的意外参数值,javascript,android,ios,cordova,Javascript,Android,Ios,Cordova,我很难理解这里出了什么问题。我从数据库中获取一个事件列表,并尝试创建一个自定义列表来显示它们,使用回调onclick方法。我得到了正确的值,我正确地显示了它们,但是onClick方法得到的是最后一个项目ID的值,而不是它自己的值 因此,如果我点击列表中的任何项目,我的警报会显示 显示活动日程:10 而不是正确的ID(我现在有10个事件) 以下是我如何处理从db获得的项目: function gotEvents(transaction, result) { var eve
显示活动日程:10
而不是正确的ID(我现在有10个事件)
以下是我如何处理从db获得的项目:
function gotEvents(transaction, result) {
var eventList;
var myDbElements = $('#myDbElements');
var params = {
items:result.rows.length,
hasImage:false,
content:[]
}
if (result != null && result.rows != null) {
for (var i = 0; i < result.rows.length; i++) {
var row = result.rows.item(i);
var rowText = row["Name"] + '<br/>' + row["Start"].slice(0,9);
var rowId = row["id"];
var contentItems = {
text: rowText,
onClick: function(){ showEventItinerary(rowId) }
}
params.content.push(contentItems);
}
for (var j=0; j<result.rows.length;j++){
PrecAppPersistence.debugObject(params.content[i]);
}
eventList = PrecAppComponents.myList(params,$('#eventsList'));
}
PrecApp.I_SCROLL.refresh();
}
function showEventItinerary(event_ID) {
alert("show itinerary for event:"+event_ID);
}
函数事件(事务、结果){
var事件列表;
var myDbElements=$(“#myDbElements”);
变量参数={
项目:result.rows.length,
hasImage:错,
内容:[]
}
if(result!=null&&result.rows!=null){
对于(var i=0;i'+row[“Start”].切片(0,9);
var rowId=行[“id”];
var contentItems={
text:rowText,
onClick:function()
}
参数content.push(contentItems);
}
对于(var j=0;j您需要创建一个闭包,因为索引i会随着循环更新:
for (var i = 0; i < result.rows.length; i++) {(function(index){
// use index instead of i inside your loop
...
// end closure
})(i);
// end loop
}
for(var i=0;i
自调用函数将在index=i的情况下执行。i是循环的一部分,其值将发生变化,而循环中的每个函数将保留其自己的索引。rowID
没有块级范围,可以使用数组存储循环中的每个项,也可以使用闭包
为每个迭代创建单独的范围
检查我是javascript新手,为了清楚起见,这是一个以I为参数的自调用函数?
for (var i = 0; i < result.rows.length; i++) {(function(index){
// use index instead of i inside your loop
...
// end closure
})(i);
// end loop
}