传递的变量号错误

Wrong variable number being passed through

本文关键字:错误 变量      更新时间:2023-09-26

当这最初加载时,就业作业在控制台中显示为就业作业1,这就是我想要的。一旦我点击了带有.employmentJobs1 .addDuty类的按钮,它应该再次注销employmentJobs1,但它会注销employmentJobs2。

谁能提供任何指导?

for (var q = 1; q <= 1; q++){
   console.log('employmentJobs'+q); 
    $('.employmentJobs'+q +' .addDuty').click(function(){
        console.log('employmentJobs'+q); 
        countDuties++;
        $('.employmentJobs'+q +' .mainDuties').clone().attr('class', 'form-group mainDutyOrder mainDuties'+ countDuties).insertAfter('.employmentJobs'+q +' .mainDutyOrder:last');
        return false;
    }); 
  }
}

click事件处理程序中的函数在更晚的时间执行,这意味着循环已经完成(结果q的值是每个点击事件中循环的最终值)。只需使用 IIFE 关闭q的值,即可创建新的执行上下文。

for (var q = 1; q <= 1; q++){
   //close over q
   (function(q){
   console.log('employmentJobs'+q); 
    $('.employmentJobs'+q +' .addDuty').click(function(){
        console.log('employmentJobs'+q); 
        countDuties++;
        $('.employmentJobs'+q +' .mainDuties').clone().attr('class', 'form-group mainDutyOrder mainDuties'+ countDuties).insertAfter('.employmentJobs'+q +' .mainDutyOrder:last');
        return false;
    }); 
  //pass q in to close over its value
  })(q)
}

尽管你不应该把事件绑定放在循环中,但你的问题解决了"封装"。

JavaScript 使用所谓的函数作用域。但是你需要的是一个块范围(即c#)。

在这里,您可以找到此类问题的确切描述,甚至还有完全符合您需求的示例。

但你也可以做的是:把你的elemets放在容器中,并在它们上面动态绑定一个点击,就像:

$('body).on('click', '.yourWrapperElement > .clickableElements', function() {
    //cour cloning magic here
});

这使得 .element 中的所有子项都可以单击,即使它们是在加载文档后添加的