Jquery,从函数访问变量

时间:2010-11-04 19:34:09

标签: jquery variables closures

我有这段代码

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); ,价值退出,但不在外面,谢谢你的帮助!

4 个答案:

答案 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'也没有意义,因为它是在事件处理程序中设置的......在返回点没有任何东西(或者只是一个旧值)。