javascript - 使用对象的值添加 onclick 事件

标签 javascript jquery

在下面的代码中,为什么postCodes[i].countryCode会返回循环中的最后一个值, 而不是循环中的当前值? 以及如何在循环中返回当前值?

for (var i = 0; i < postCodes.length; i++) {
    for (var ind = 0; ind < salesSuite.Defaults.Countries.length; ind++) {
        if (postCodes[i].countryCode == myNamespace.Countries[ind].code) {
            $('<button/>')
                .click(function () {
                    console.log(postCodes[i].countryCode);
                })
                .appendTo($modalContent);

最佳答案

尝试添加一个函数来获取一个处理程序,该处理程序创建一个局部变量来保存该 postCode。当然,这样做的原因是在处理程序中使用了共享变量 i ,该变量在调用处理程序时已经用完了所以最终在您的处理程序中您试图调用 postCodes [postCodes.length].countryCodeundefined.countryCode 相同,将抛出错误..

$('<button/>')
     .click(getHandler(postCodes[i]))
     .appendTo($modalContent);
.....
.....

function getHandler(postCode){ 
// This function creates a closure variable postCode which will hold that particular postCode passed in for each invocation to be used in the function reference returned by this
  return function () {
        console.log(postCode.countryCode);
   }
}

Demo

您可以利用 jquery data api 来保存邮政编码,而不是执行所有这些操作。

  $('<button/>')
            .click(function () {
                console.log($(this).data('postCode').countryCode);
            })
            .appendTo($modalContent).data('postCode', postCodes[i]);

Demo

关于javascript - 使用对象的值添加 onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433532/

相关文章:

javascript - 如何将 setTimeout() 与 React Hooks useEffect 和 setState 一起使用?

javascript - 为什么javascript通过ajax加载后不工作?

javascript - 通过 jquery 循环更新子范围内容

javascript - 为什么我的 div 没有出现在 jquery show 中

javascript - 使用 Splunk 获取 CORS 错误

javascript 音频语法可能是错误的?

javascript - 使用 setInterval 函数定位 div

javascript - 如何制作从日期 1 到 31 具有不同值的条形图?

javascript - 在 AngularJS 中,有没有一种方法可以使用指令或某种功能来显示多个 div?

javascript - setTimeout 的替代方案?