Javascript/jQuery 将不同的函数参数附加到 .click() 方法

标签 javascript jquery

这段代码有什么问题?阅读这篇文章似乎对于每个循环,jquery 应该附加一个函数,并为每次迭代分配值。相反,它将 i = 2 附加到每个对象。它为什么要这样做,我怎样才能让它附加预期值(例如 0、1、...)?

//data.length is 2.

for (i=0; i<data.length; i++) {
    // Attach the click function
    linkId = 'a#' + pk;
    $(linkId).click(function(e) {
        e.preventDefault();
        console.log(i, pk, data);
    });
};

console.log -- 每个链接都有相同的参数

2 "52fef25e391a56206f03be6e" [object Array]

最佳答案

您假设一个 block 创建了一个新的变量作用域。它不在 JavaScript 中。只有函数执行会。<​​/p>

如果您改用 $.each(),您为其提供的回调将在每次迭代时被调用,因此您将对每个迭代都有一个新的作用域。

$.each(data, function(i,item) {
                //    ^---^---function parameters are local to this scope

//   v--declare a variable local to this scope
    var linkId = 'a#' + pk;

                //   v--the function made in this scope can access the local vars
    $(linkId).click(function(e) {
        e.preventDefault();
        console.log(i, pk, data, linkId, data[i]);
    });
});

关于Javascript/jQuery 将不同的函数参数附加到 .click() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803811/

相关文章:

javascript - 拼接临时数组会修改主数组

javascript - Rails 4 jquery 函数只工作一次,而不是重新加载

javascript - jQuery Ajax 停止长轮询

c# - 如何检查 mvc3 中当前处于事件状态的部分?

javascript - 你能在 React 渲染 Prop 的模板字符串中使用 jsx 吗?

javascript - 未捕获的范围错误: Maximum call stack size exceeded running grunt development

jquery - Flask:如何添加在按下时动态向表单添加行的按钮

javascript - 我如何使用javascript刷新页面内容并返回到同一页面

javascript - 使用 Html/Java 创建小键盘的问题

Javascript,解析变量中的多个值