javascript事件应用于错误的元素

javascript事件应用于错误的元素,javascript,jquery,Javascript,Jquery,我在计数器中循环,根据计数器值查找元素,并将事件绑定到与计数器匹配的集合 psuedo代码: for index in counter find elements of data attribute matching counter attach click event to that matched query set js: var组=[]; $('.match me')。每个(函数(){ var group_id=$(this).data('instance'); if(

我在计数器中循环,根据计数器值查找元素,并将事件绑定到与计数器匹配的集合

psuedo代码:

for index in counter
    find elements of data attribute matching counter
    attach click event to that matched query set
js:

var组=[];
$('.match me')。每个(函数(){
var group_id=$(this).data('instance');
if(groups.indexOf(group_id)<0){
groups.push(组\u id);
}
});
对于(组的var i){
窗口['test'+i]=$('*[data instance='+i+']);
窗口['test'+i]。每个(函数(){
$(此)。在('单击',函数()上){
//窗口['test'+i]的CONSOLE.LOG输出最后一个匹配集
窗口['test'+i].css('color','red');
});
});
}

问题就在我绑定事件侦听的地方,匹配的元素集的变量始终是最后一个匹配的元素集。我认为通过在
窗口中创建动态全局变量可以避免这个问题,但我不确定我做错了什么。

当单击事件发生时,
I
已经增加到最后一个元素

使用闭包:

for(var i of groups ){
    window['test'+i] = $('*[data-instance=' + i + ']');
    window['test'+i].each(function(){
         (function(i) {
              $(this).on('click',function(){
                window['test'+i].css('color','red');
              });
          })(i);
     });
}

哦,你不工作ppl想怎么样你为什么要把东西分配给窗口?全球化是个坏主意<代码>$('*[data instance]')。在(“单击”,函数(){$(this.css('color','red');})
@epascarello我认为这是试图绕过仅引用最后一个变量的问题。您应该能够接受下面的答案,并将
窗口[
实例替换为
var etc
,以获得相同的效果。(无需尝试按数字不同地命名变量-每次执行闭包时,它们将是不同的实例)@Epasarello,因为我需要创建一个动态变量名,否则该变量将在每次迭代时被覆盖。不要使用全局变量。如果您真的认为这是您需要做的,则创建一个全局变量并分配给它。
var myObj={};myObj['test'+I]=“foo”
似乎应该有比您现在做的更好的解决方案。
for(var i of groups ){
    window['test'+i] = $('*[data-instance=' + i + ']');
    window['test'+i].each(function(){
         (function(i) {
              $(this).on('click',function(){
                window['test'+i].css('color','red');
              });
          })(i);
     });
}