如何通过单击listview中创建动态的项目来获取数据?

时间:2012-05-24 19:56:38

标签: jquery

我创建了一个动态列表视图,我想从列表视图中的行中获取我点击的数据(数据显示在列表视图中,因此'append'工作完美),我得到“undefind”时我点击并尝试将数据输入“x”,我不明白为什么!

我的代码:

for (var i = 0; i < json_parsed.Categories.length; i++){
        var cars= json_parsed.Categories[i];


        $('#categoryList').append($('<li   data-categoryId = cars.car_name>').html(' <a href="#"  onclick = "temp()" >'+cars.car_name+</a>'));
}


function temp () {
   var x = $(this).data('categoryId');  
   alert (x);   
};

向前谢谢

3 个答案:

答案 0 :(得分:2)

由于您使用的是jQuery,因此可以绑定onclick事件,如下所示。

$('#categoryList').on('click', 'li', function () {
    var x = $(this).data('categoryId');
    alert(x);
});

完整代码:(修复了for循环中的一些内容)

var cars;
for (var i = 0; i < json_parsed.Categories.length; i++){
   cars = json_parsed.Categories[i];
   $('#categoryList').append('<li data-categoryId="' + cars.car_name + '"><a href="javascript:void(0)" >' +cars.car_name + '</a>');
}    

$('#categoryList').on('click', 'li', function () {
    var x = $(this).data('categoryId');
    alert(x);
});

修改

  

谢谢,但它不起作用...我添加了我的代码here!谢谢你!

您错过了提到您使用的是jQuery版本1.6.4。

无论如何改变点击处理程序,如下所示

$('#categoryList').delegate('li', 'click', function() {
    var x = $(this).data('categoryid');
    alert(x);
});

DEMO

答案 1 :(得分:0)

你需要使用直播事件,即一个eventHandler,它将绑定到那些不是在页面加载时创建的元素,但会在稍后创建,即。即将到来的。

// delegate to #categoryList if it already in DOM in page load

$('#categoryList').on('click', 'li', function() {
   var x = $(this).data('categoryId');  
   alert(x);
});

答案 2 :(得分:0)

Live是处理绑定动态内容的传统方式。但是,jQuery建议在jQuery 1.7+上使用on()。 http://api.jquery.com/live/

示例:

$('element').on('click', function(){//Do something});