我创建了一个动态列表视图,我想从列表视图中的行中获取我点击的数据(数据显示在列表视图中,因此'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);
};
向前谢谢
答案 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);
});
答案 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});