#jquery #ajax #json #jquery-mobile #html-lists
#jquery #ajax #json #jquery-мобильный #html-списки
Вопрос:
Я новичок в jquery mobile. Я пытаюсь сгенерировать элементы динамического интерактивного списка, где элементы списка — это имена, поступающие из ajax в качестве ответа.Я получаю электронное письмо Рави Тамады на второй странице для каждого элемента списка. Почему идентификатор электронной почты не меняется для каждого элемента списка? Есть ли какие-либо ошибки в моем коде?
Мой скрипт:
//When DOM loaded we attach click event to button
$(document).on("pageinit","#authors-list-page",function() {
//start ajax request
$.ajax({
url: “myURL/contacts.json",
dataType: "json",
success: function(data) {
var listItem = "";
for(var i=0;i<data.contacts.length;i ){
listItem = '<li><a href="#">' data.contacts[i].name '</a></li>';
}
$("#dynamicFieldList").append(listItem).promise().done(function () {
//refresh list here
$(this).listview("refresh");
//then add click event using delegation
$(this).on("click", "li", function () {
var currentItem = $(this).index();
alert(currentItem);
var newPage = $("<div data-role='page' id='secondpage'><div data- role=header><a data-iconpos='left' data-icon='back' href='#' data-role='button' data-rel='back'>Back</a><h1>" data.contacts[currentItem].name "</h1></div><div data-role=content>Email: " data.contacts[currentItem].email "</div></div>");
// Append the new page into pageContainer
newPage.appendTo($.mobile.pageContainer);
// Move to this page by ID '#page'
$.mobile.changePage('#secondpage');
});
});
}
});
});
Контакты.json :
{
"contacts": [
{
"id": "c200",
"name": "Ravi Tamada",
"email": "ravi@gmail.com",
"address": "xx-xx-xxxx,x - street, x - country",
"gender" : "male",
"phone": {
"mobile": " 91 0000000000",
"home": "00 000000",
"office": "00 000000"
}
},
{
"id": "c201",
"name": "Johnny Depp",
"email": "johnny_depp@gmail.com",
"address": "xx-xx-xxxx,x - street, x - country",
"gender" : "male",
"phone": {
"mobile": " 91 0000000000",
"home": "00 000000",
"office": "00 000000"
}
},
.
.
.
.
]}
Комментарии:
1. потому что вы переходите на ту же страницу. вы должны динамически создавать уникальные
id
для каждой динамической страницы.$.mobile.changePage('#secondpage');
Ответ №1:
Вы повторяете весь ответ, а затем устанавливаете элемент списка.
Используйте это:
for(var i=0;i<data.contacts.length;i ){
listItem = '<li><a href="#">' data.contacts[i].name '</a></li>';
$("#dynamicFieldList").append(listItem).promise().done(function () {
//Your code of function.
});
}
Комментарии:
1. когда я добавляю код внутри цикла и нажимаю на элемент списка, элементы списка добавляются
2. Вам нужно будет держаться
newPage.appendTo($.mobile.pageContainer);
вне цикла. Добавьте все свои элементы в список div в цикле, а затем из цикла добавьте новый динамически сгенерированный div в pageContainer. @user37445023. Тот же результат (элементы списка добавляются при загрузке страницы). Можно ли опубликовать измененный код в jsfiddle?
4. @user3744502 опубликуйте скрипку для вашего текущего кода. Я постараюсь это обновить.
Ответ №2:
Используйте приведенный ниже код, добавлен код добавления в боковой цикл for.
for(var i=0;i<data.contacts.length;i ){
listItem = '<li><a href="#">' data.contacts[i].name '</a></li>';
$("#dynamicFieldList").append(listItem).promise().done(function () {
//refresh list here
$(this).listview("refresh");
//then add click event using delegation
$(this).on("click", "li", function () {
var currentItem = $(this).index();
alert(currentItem);
var newPage = $("<div data-role='page' id='secondpage'><div data- role=header><a data-iconpos='left' data-icon='back' href='#' data-role='button' data-rel='back'>Back</a><h1>" data.contacts[currentItem].name "</h1></div><div data-role=content>Email: " data.contacts[currentItem].email "</div></div>");
// Append the new page into pageContainer
newPage.appendTo($.mobile.pageContainer);
// Move to this page by ID '#page'
$.mobile.changePage('#secondpage');
});
}
Комментарии:
1. когда я добавляю код внутри цикла и нажимаю на элемент списка, элементы списка добавляются