0
4

4 回答 4

1

您最好的选择是在li元素内创建自定义数据属性,以便稍后访问。将您需要的数据推送到这些自定义属性。例子:

items.push('<li id="cat_li_'+i+'" data-custom-cool="' + elem.someData + '"><a href="#places">' + elem.name + '</a></li>');

现在,您可以this在单击处理程序中根据需要提取数据。

$(this).data("custom-cool"); //this is equiv to elem.someData .

或者,如果您有更大的数据,您可以使用 $.data 元素存储对象:

$.each(data, function(i, elem) {
            items.push('<li id="cat_li_'+i+'"><a href="#places">' + elem.name + '</a></li>');
        });
    id.html(items).listview('refresh');
    var element = $("#cat_li_" + i)[0]; //cant use jQ object
    $.data(element, "object", elem); //assign object
});

现在您的点击处理程序应该能够像这样访问对象(在处理程序内部):

console.log($.data(this, "object").objProperty); //replace objProperty with your property to get.

演示: http: //jsfiddle.net/tymeJV/vx8Xt/1/点击“testdiv”并查看控制台。

于 2013-09-05T15:06:51.503 回答
1

我认为问题在于id.html(items),.html()不接受数组。

id.html(items.join('')).listview('refresh');

另外要解决您的其他问题,您应该使用 classes 而不是 ids :

function initListByUrl(id, requestUrl) {
    $.getJSON(requestUrl, function(data) {
        var items = []
        $.each(data, function(i, elem) {
                items.push('<li class="cat"><a href="#places">' + elem.name + '</a></li>');
            });
        id.html(items).listview('refresh');
    });
}


$(document).on("click", '.cat a', function(event, ui) {
    console.log(3);
});
于 2013-09-05T15:52:49.377 回答
0
于 2013-09-05T14:51:52.360 回答
0

在列表中的所有项目都附加到 Document 之后,您应该将事件绑定移动到成功函数中

    success: function(data) {
    var items = []
        $.each(data, function(i, elem) {
            items.push('<li id="cat_li_'+i+'"><a href="#places">' + elem.name + '</a></li>');
        });
        id.html(items).listview('refresh');
        // move your click event handling here 
    }
于 2013-09-05T14:54:31.267 回答