Javascript 基于数组的动态侦听器

Javascript 基于数组的动态侦听器,javascript,jquery,Javascript,Jquery,我正在使用jQuery和我使用Slim构建的api创建移动应用程序 我的总体目标是创建一个按钮列表,单击这些按钮将调用具有适当参数的函数 我正在成功地向slim发送请求,获取用户列表并将结果存储在用户对象的全局数组中 接下来,我将遍历数组,将html附加到文档中以显示按钮。同时,我添加了一个单击侦听器。侦听器被添加,但不像我预期的那样 用户是具有全局范围的用户对象数组。用户对象可以归结为[{“name”:“user's name”}] 另外一个相关的事实可能是我在回电话时这样做 $.getJSO

我正在使用jQuery和我使用Slim构建的api创建移动应用程序

我的总体目标是创建一个按钮列表,单击这些按钮将调用具有适当参数的函数

我正在成功地向slim发送请求,获取用户列表并将结果存储在用户对象的全局数组中

接下来,我将遍历数组,将html附加到文档中以显示按钮。同时,我添加了一个单击侦听器。侦听器被添加,但不像我预期的那样

用户是具有全局范围的用户对象数组。用户对象可以归结为[{“name”:“user's name”}]

另外一个相关的事实可能是我在回电话时这样做

$.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;i
for(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()
    });
}