Это должно выглядеть следующим образом (без слишком большого изменения макета):
var uid, job_name;
for (var i=0; i<results.rows.length; i++) {
var row = results.rows.item(i);
uid = row['id'];
job_name = row['job_name'];
$("ul#my_jobs").append('<li class="arrow" id="job_' + uid +'"><a class="fade" href="#prueba">' + job_name + '</a></li>');
(function(id) {
$("li#job_" + id).bind('tap', function(){
$("#job_detail").html(id);
});
})(uid)
}
Здесь JavaScript не имеет области видимости блока, так что переменная row
, даже если она находится внутри for
loop, является областью действия для всей функции, и она заменяется на каждой итерации ... и заканчивается тем, что становится последним значением (именно поэтому вы каждый раз видите последнее id
).
Уменьшенная версияиспользование этой новой области видимости будет следующим:
for (var i=0; i<results.rows.length; i++) {
var row = results.rows.item(i);
(function(uid, job_name) {
$('<li class="arrow" id="job_' + uid +'"><a class="fade" href="#prueba">' + job_name + '</a></li>').bind('tap', function(){
$("#job_detail").html(uid);
}).appendTo("#my_jobs");
})(row['id'], row['job_name']);
}
Это объявляет эти другие переменные uid
и jod_name
только там, где они необходимы, и устраняет дополнительный обход внутри цикла (поиск <li>
Вы только что создали).