Javascript 如何修复在for循环中使用onclick事件时的范围问题
我目前在for循环中实现onclick事件时遇到困难。它总是返回未定义的值,而不是警告相应的值(可能是范围问题,因为迭代本身工作正常) 直到现在,我一直试图将I变量传递给onclick函数;但收效甚微Javascript 如何修复在for循环中使用onclick事件时的范围问题,javascript,for-loop,scope,onclick,Javascript,For Loop,Scope,Onclick,我目前在for循环中实现onclick事件时遇到困难。它总是返回未定义的值,而不是警告相应的值(可能是范围问题,因为迭代本身工作正常) 直到现在,我一直试图将I变量传递给onclick函数;但收效甚微 for (var i = 0; i < timeSpanLength; i++) { // creating the wrap for the month var month = document.createElement("div");
for (var i = 0; i < timeSpanLength; i++) {
// creating the wrap for the month
var month = document.createElement("div");
month.className = 'month_element';
var reference_month = document.createElement("span");
reference_month.innerHTML = time_span[i];
//onclick event
reference_month.onclick = function(i) {
var month_beginning = signup_date;
var month_end = time_span[i];
alert(month_end);
//searchForData(month_beginning, month_end);
};
//append to container
month.appendChild(reference_month);
document.getElementById('time_container').appendChild(month);
}
for(变量i=0;i
预期结果是触发一个警报,该警报显示与上面span元素中显示的月份相同的月份。我需要变量将其传递给另一个函数
非常感谢您的帮助,因为我是javascript的初学者。for(var I=0;Ifor (var i = 0; i < timeSpanLength; i++) {
(function (index) {
// creating the wrap for the month
var month = document.createElement("div");
month.className = 'month_element';
var reference_month = document.createElement("span");
reference_month.innerHTML = time_span[index];
//onclick event
reference_month.onclick = function() {
var month_beginning = signup_date;
var month_end = time_span[index];
alert(month_end);
//searchForData(month_beginning, month_end);
};
//append to container
month.appendChild(reference_month);
document.getElementById('time_container').appendChild(month);
})(i);
}
(功能(索引){
//创建月份的换行符
var月=document.createElement(“div”);
month.className='month_element';
var reference_month=document.createElement(“span”);
reference_month.innerHTML=time_span[index];
//onclick事件
reference\u month.onclick=函数(){
var月\开始=注册日期;
var月底=时间跨度[指数];
警报(月底);
//searchForData(月初、月底);
};
//附加到容器
月。追加子项(参考月);
document.getElementById('time_container').appendChild(月);
})(i) );
}
此回调函数处理程序正在形成外部作用域的闭包。此外,
var
还有一个功能范围,因此本质上代码块可以重写为:
var i;
for (i = 0; i < timeSpanLength; i++) {
...
//onclick event
reference_month.onclick = function(i) {
var month_beginning = signup_date;
var month_end = time_span[i];
alert(month_end);
//searchForData(month_beginning, month_end);
};
...
}
或形成一个新范围的IIFE,该范围绑定到循环中i
的每个新值:
for (var i = 0; i < timeSpanLength; i++) {
(function(i){
reference_month.onclick = function(i) {
var month_beginning = signup_date;
var month_end = time_span[i];
alert(month_end);
//searchForData(month_beginning, month_end);
};
})(i)
}
for(var i=0;i
而不是var i=0代码>使用设i=0代码>reference\u month.onclick=function(i)
@非常感谢!此外,我还必须从onclick函数中删除I
for (var i = 0; i < timeSpanLength; i++) {
(function(i){
reference_month.onclick = function(i) {
var month_beginning = signup_date;
var month_end = time_span[i];
alert(month_end);
//searchForData(month_beginning, month_end);
};
})(i)
}