传递的变量号错误
Wrong variable number being passed through
当这最初加载时,就业作业在控制台中显示为就业作业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 中的所有子项都可以单击,即使它们是在加载文档后添加的
相关文章:
- jQuery变量错误
- 已定义变量出现未定义错误
- 可以'无法正确访问NODE_ENV环境变量,这是NODE.js的错误吗
- 使用eval()定义变量显示未定义的错误
- 变量类型错误
- react.js foreach变量错误
- 在JavaScript中引用未定义的变量时,如何避免出现错误
- 更新带有Javascript函数错误的变量
- Javascript中的LESS变量给出语法错误
- 如果JS会话变量为null,如何避免500内部服务器错误
- 未捕获的引用错误:变量未在单击函数上定义
- 范围变量返回长度错误
- 类型错误:变量未定义
- 字符串类型错误: 变量未定义
- 错误变量空间未定义原因
- 引用错误:变量未定义
- 引用错误变量未声明
- 错误变量没有定义,但在使用之前定义了
- 通过检查错误变量来停止提交表单
- 脚本错误:变量未定义