我有这段代码
function getSelectData(id) {
jQuery(id).change(function () {
var value='';
jQuery(id+" option:selected").each(function () {
value =jQuery(this).val() ;
});
console.log(value);
});
return value;
}
var d = getSelectData("#sort_post_date");
console.log(d);
我如何访问变量“value”,我尝试了不同的方法,但没有,其中是console.log(value); ,价值退出,但不在外面,谢谢你的帮助!
答案 0 :(得分:9)
您需要将值移到函数之外,以便绑定到闭包。像这样:
function getSelectData(id) {
var value='';
// set value to be the current selected value
value = jQuery(id+" option:selected").val();
// change value whenever the box changes
jQuery(id).change(function () {
value = jQuery(id+" option:selected").val();
console.log("I see a change! -> "+value);
});
console.log(value);
return value;
}
var d = getSelectData("#sort_post_date");
console.log(d);
这是表明它有效的小提琴:http://jsfiddle.net/ZvuMh/
答案 1 :(得分:1)
这是一个经典的封闭问题。以下是一些最相似的
Event handlers inside a Javascript loop - need a closure?
javascript timer or intervals created in loop using closure
Javascript closure inside loops - simple practical example
底线,value
变量不是您正在创建的事件处理程序的本地变量。因此,您创建的所有处理程序将具有value
在外部函数结束时所具有的值。在这种情况下,它仍然是空白的。
答案 2 :(得分:0)
您无法在声明的函数之外访问您的值变量。这称为变量范围。阅读变量范围here
如果您希望能够访问变量,则需要在范围内至少与声明的范围一样。
所以在这种情况下:
function getSelectData(id){
var value='';
jQuery(id).change(function () {
jQuery(id+" option:selected").each(function () {
value =jQuery(this).val() ;
});
console.log(value);
});
return value;
}
var d=getSelectData("#sort_post_date");
console.log(d);
答案 3 :(得分:0)
尝试在全局范围内定义值变量:
var value='';
function getSelectData(id) {
jQuery(id).change(function () {
value='';
jQuery(id+" option:selected").each(function () {
value =jQuery(this).val() ;
});
console.log(value);
});
return value;
}
在这里返回'value'也没有意义,因为它是在事件处理程序中设置的......在返回点没有任何东西(或者只是一个旧值)。