Javascript 基于数组的动态侦听器
我正在使用jQuery和我使用Slim构建的api创建移动应用程序 我的总体目标是创建一个按钮列表,单击这些按钮将调用具有适当参数的函数 我正在成功地向slim发送请求,获取用户列表并将结果存储在用户对象的全局数组中 接下来,我将遍历数组,将html附加到文档中以显示按钮。同时,我添加了一个单击侦听器。侦听器被添加,但不像我预期的那样 用户是具有全局范围的用户对象数组。用户对象可以归结为[{“name”:“user's name”}] 另外一个相关的事实可能是我在回电话时这样做Javascript 基于数组的动态侦听器,javascript,jquery,Javascript,Jquery,我正在使用jQuery和我使用Slim构建的api创建移动应用程序 我的总体目标是创建一个按钮列表,单击这些按钮将调用具有适当参数的函数 我正在成功地向slim发送请求,获取用户列表并将结果存储在用户对象的全局数组中 接下来,我将遍历数组,将html附加到文档中以显示按钮。同时,我添加了一个单击侦听器。侦听器被添加,但不像我预期的那样 用户是具有全局范围的用户对象数组。用户对象可以归结为[{“name”:“user's name”}] 另外一个相关的事实可能是我在回电话时这样做 $.getJSO
$.getJSON(url, function(data){
for(i=0;i<data.length;i++)
{
var u = new User();
u.name = data[i]['name'];
}
})
//The success handler DOES get called.
.success(function() {
for(var i=0; i<users.length; i++)
{
//this part works. users[i] is accessed as expected.
var html_string = '<li>'+users[i].name+'</li>';
$("#myUL").append(html_string);
$("#myUL li:last").click(function(){
//logs undefined
console.log(users[i].name);
//Handle the event
eventHandleFunction()
});
}
})
$.getJSON(url、函数(数据){
对于(i=0;i您可以使用
这样,您就不必显式地将click事件处理程序附加到DOM中每个动态添加的li
如果您使用的是jquery 1.7+版,那么您可以使用如下方法
$("#myUL").on("click","li:last",function(){
//event handler code here
});
为什么部分
我看到的原因是范围
for(var i=0; i<users.length; i++)
{
var html_string = '<li>'+users[i].name+'</li>';
$("#myUL").append(html_string);
$("#myUL li:last").click(function(){
//logs undefined BECAUSE i is undefined inside the click handler
console.log(users[i].name);
//Handle the event
eventHandleFunction()
});
}
for(vari=0;ifor(vari=0;ilets说用户是数组(“a”、“b”、“c”)。然后使用for(vari=0;i@Jake-更改了我的答案,改为尝试吗?这导致我重写了一些代码,但有一次我这样做了(在代理上使用RTFM)我找到了答案。我的问题的“为什么”部分有什么意见吗?@Jake我已经更新了答案,请阅读更新部分的评论
$("#myUL").on("click","li:last",function(){
//event handler code here
});
for(var i=0; i<users.length; i++)
{
var html_string = '<li>'+users[i].name+'</li>';
$("#myUL").append(html_string);
$("#myUL li:last").click(function(){
//logs undefined BECAUSE i is undefined inside the click handler
console.log(users[i].name);
//Handle the event
eventHandleFunction()
});
}
for(var i=0; i<users.length; i++) {
var numb = i,
html_string = '<li>'+users[numb].name+'</li>';
$("#myUL").append(html_string);
$("#myUL li:last").click(function(){
console.log(users[numb].name);
eventHandleFunction()
});
}