Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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_Android_Ios_Cordova - Fatal编程技术网

JavaScript中的意外参数值

JavaScript中的意外参数值,javascript,android,ios,cordova,Javascript,Android,Ios,Cordova,我很难理解这里出了什么问题。我从数据库中获取一个事件列表,并尝试创建一个自定义列表来显示它们,使用回调onclick方法。我得到了正确的值,我正确地显示了它们,但是onClick方法得到的是最后一个项目ID的值,而不是它自己的值 因此,如果我点击列表中的任何项目,我的警报会显示 显示活动日程:10 而不是正确的ID(我现在有10个事件) 以下是我如何处理从db获得的项目: function gotEvents(transaction, result) { var eve

我很难理解这里出了什么问题。我从数据库中获取一个事件列表,并尝试创建一个自定义列表来显示它们,使用回调onclick方法。我得到了正确的值,我正确地显示了它们,但是onClick方法得到的是最后一个项目ID的值,而不是它自己的值

因此,如果我点击列表中的任何项目,我的警报会显示

显示活动日程: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
}