javascript – 如何确保addEventListener不会忽略for循环中i var的迭代?

前端之家收集整理的这篇文章主要介绍了javascript – 如何确保addEventListener不会忽略for循环中i var的迭代?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > JavaScript closure inside loops – simple practical example39个
我正在制作一个会生成很多按钮的用户脚本,我似乎无法给它们一个独特的功能.

我已经试过了

downArrow.onclick = function (){downVote(id,username)};<br>

downArrow.onclick = "downVote(\"" + id + "\",\"" + username + "\")";

但它们不起作用.然后我在某处读到只有以下工作:

downArrow.addEventListener('click',downVote(id,username),false);

这导致所有按钮仅下调迭代的最后ID和用户名.

我希望他们都有独特的onclick功能.

整个循环:

var targetPosts = document.getElementsByClassName("thing message");
for (var i=0;i<targetPosts.length;i++) 
    {
    try
      {
        id = targetPosts[i].getAttribute("data-fullname");
        username = targetPosts[i].childNodes[4].childNodes[1].childNodes[0].childNodes[1].childNodes[1].childNodes[0].innerHTML;

        var upArrow=document.createElement("DIV");
        upArrow.className = "arrowUp";
        upArrow.id = id + "up";
        upArrow.addEventListener('click',function(){ upVote(id,username)},false);

        var downArrow=document.createElement("DIV");
        downArrow.className = "arrowDown";
        downArrow.id = id + "down";
        downArrow.addEventListener('click',function(){ downVote(id,false

      targetPosts[i].childNodes[3].appendChild(upArrow);
      targetPosts[i].childNodes[3].appendChild(downArrow);
      }
    catch(err){}
    }

解决方法

bind就是针对这样的情况而发明的:
upArrow.addEventListener('click',upVote.bind(upArrow,id,false);

应该做的工作.

原文链接:https://www.f2er.com/js/151239.html

猜你在找的JavaScript相关文章