0

我正在处理动态列表。这是标记和用于显示它的html。

 markup += '<li><a href="#fbfullpostviewpage" id="addPostToLocalStorage" data-rel="dialog" data-transition="pop" data-overlay-theme="e" data-inline="true"><img src="' + thumb_url + '">' +'<h4>' + name + '</h4><p>' +'posted this photo....</p><p>'+likes+'<img src="images/facebook-like-16.png"></p></a></li>';

这是在一个循环内,因此它对每个列表项都执行此操作。在循环之后我有一个

$('#newsfeedposts').append(markup);
$('#newsfeedposts').listview("refresh");

但是,当单击列表中的每个项目时,我想将其添加到本地存储中。在上面的代码之后我这样做,

 $('a').bind('click', function(){
         localStorage.setItem("fbclickedPost", JSON.stringify(post));
         console.log(post);
         alert("this post was added to local storage");

        // showDetailedPost(post);
        var retrievedData = localStorage.getItem("fbclickedPost");
        var facebookPost2 = JSON.parse(retrievedData);
         console.log(facebookPost2);

它可以工作并记录以控制台数组项,但是问题是无论在列表上单击什么项,它总是仅将列表中的最后一项添加到本地存储中,但我想添加当前正在单击的项上,到本地存储。

请提供任何帮助!我已经挣扎了很久。

4

1 回答 1

0

您可以尝试将点击事件添加到链接元素<a>,然后再将它们添加到您的listview(创建它们之后):

在您的循环中,执行以下操作:

new_markup = $('<li><a href="#fbfullpostviewpage" id="addPostToLocalStorage" data-rel="dialog" data-transition="pop" data-overlay-theme="e" data-inline="true"><img src="' + thumb_url + '">' +'<h4>' + name + '</h4><p>' +'posted this photo....</p><p>'+likes+'<img src="images/facebook-like-16.png"></p></a></li>');

// Add the click event to the link <a> :
new_markup.children('a').click(function(){
     localStorage.setItem("fbclickedPost", JSON.stringify(post));
     console.log(post);
     alert("this post was added to local storage");

    // showDetailedPost(post);
    var retrievedData = localStorage.getItem("fbclickedPost");
    var facebookPost2 = JSON.parse(retrievedData);
     console.log(facebookPost2);
});

$('#newsfeedposts').append(new_markup);

然后,在你的循环之后,当它结束时,刷新你的listview

$('#newsfeedposts').listview("refresh");

让我知道这是否可行。

于 2013-07-02T05:17:22.560 回答