JQuery 事件之外的变量范围
Variable scope outside of JQuery Event
我一直为 quarterStr
未定义?我试图在 getNexthreeMonths
函数中访问它。所以从下拉菜单中选择了一个月,然后我想在 getNexthreeMonths
:
中访问结果
getNextThreeMonths: function() {
$("#date").on('change', function (e){
var currentMonth = $(this).find('option:selected').attr('id');
var currentMonth = parseInt(currentMonth);
var qNum = Math.floor(currentMonth / 3);
var qArr = ["Jan","Apr","Jul","Oct"];
var quarterStr = qArr[ (qNum+1) % 4 ] + "," + qArr[ (qNum+2) % 4 ] + "," + qArr[ (qNum+3)%4 ];
});
console.log(quarterStr);
}
这有两个原因。
首先,var quarterStr =
中的 var
表示该变量的局部作用域为您作为参数传递给 on()
的匿名函数,并且无法在该函数外部访问。
其次,在日期元素上的 change 事件触发且该函数为 运行 之前,不会将值分配给 quarterStr
。您正在尝试在分配事件处理程序后立即读取该值。到那时它不可能改变,所以它永远是未定义的。
你需要重新思考你的逻辑。您不能使用 JavaScript 进行时间旅行并弄清楚用户在未来某个时间点可能会做什么。
我一直为 quarterStr
未定义?我试图在 getNexthreeMonths
函数中访问它。所以从下拉菜单中选择了一个月,然后我想在 getNexthreeMonths
:
getNextThreeMonths: function() {
$("#date").on('change', function (e){
var currentMonth = $(this).find('option:selected').attr('id');
var currentMonth = parseInt(currentMonth);
var qNum = Math.floor(currentMonth / 3);
var qArr = ["Jan","Apr","Jul","Oct"];
var quarterStr = qArr[ (qNum+1) % 4 ] + "," + qArr[ (qNum+2) % 4 ] + "," + qArr[ (qNum+3)%4 ];
});
console.log(quarterStr);
}
这有两个原因。
首先,var quarterStr =
中的 var
表示该变量的局部作用域为您作为参数传递给 on()
的匿名函数,并且无法在该函数外部访问。
其次,在日期元素上的 change 事件触发且该函数为 运行 之前,不会将值分配给 quarterStr
。您正在尝试在分配事件处理程序后立即读取该值。到那时它不可能改变,所以它永远是未定义的。
你需要重新思考你的逻辑。您不能使用 JavaScript 进行时间旅行并弄清楚用户在未来某个时间点可能会做什么。