JavaScript:如何在动态生成的 jQuery .click() 函数中发送函数参数?

标签 javascript jquery

我有一个 ajax 请求返回我 JSON 数据(对象数组)。 迭代这个数组我生成一个链接列表。我想设置一个 onClick 事件并使用来自 ajax 响应的参数调用一个函数。

可能听上去不太清楚,举个例子:

function test(param1) {
    // ...
}

$.ajax({
    url: 'getSomeData.php',
    type: 'post',
    data: data,
    success: function(result){
        var result = JSON.parse(result);
        $div = $('<div />');

        for (i in result.someObject) {
            $div.append('<a href="#" id="linkID' + i + '">ajax link ' + i + '</a>');
            $('#linkID' + i).click(function(){
                test(result.someObject[i]); // <--- My question is here
                return false;
            });
        }
        $(document.body).append($div);
    }
});

在我的函数 test 中,我总是得到迭代数组的最后一个对象。我知道为什么会发生这种情况,但我不知道如何解决。

最佳答案

这是 i 范围的问题,如果您使用闭包将其范围限制为点击事件处理程序,如下所示,它应该没问题。

(function(i) {
  $('#linkID' + i).click(function(){
    test(result.someObject[i]); // <--- My question is here
    return false;
  });
})(i);

这保证 i 是创建处理程序时的值,而不是最后设置的值。

关于JavaScript:如何在动态生成的 jQuery .click() 函数中发送函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348814/

相关文章:

javascript - Angular JS,未在表(ng-repeat)上显示套接字数据

javascript - Javascript-这是什么类型的HTML表格,您可以使用哪种类型的网络抓取技术?

javascript - 使用ajax更新html页面

jQuery 附加 html 与附加现有元素

javascript - 在页面上居中 visualize.js div 内容

javascript - 如何比较两个foreach循环数据

javascript - 如何表达 "max-device-width"和“min-device-width : in JavaScript?

javascript - 数据表 : How to disable filtering after init

javascript - 如何使用 jquery 找到鼠标悬停时的当前元素文本

php - 使用 HTML/JQuery/PHP 提交表单并返回值