Jquery, переменная доступа из функции - PullRequest
1 голос
/ 04 ноября 2010

У меня есть этот код

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);

Как я могу получить доступ к переменной "значение", я пробовал разные методы, но ничего, где находится console.log (значение); , выход значения, но снаружи ничего нет, спасибо за помощь!

Ответы [ 4 ]

9 голосов
/ 04 ноября 2010

Вам не нужно перемещать значение за пределы функции, чтобы оно было связано с замыканием.Вот так:

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 голос
/ 04 ноября 2010

Это классический вопрос закрытия. Вот некоторые из наиболее похожих

Обработчики событий внутри цикла Javascript - нужно закрытие?

таймер JavaScript или интервалы, созданные в цикле с использованием замыкания

Закрытие Javascript внутри циклов - простой практический пример

В итоге, переменная value не является локальной для обработчиков событий, которые вы создаете. Таким образом, все созданных вами обработчиков будут иметь значение, которое value имело при завершении внешней функции. В этом случае он все еще не заполнен.

0 голосов
/ 04 ноября 2010

Попробуйте определить переменную-значение в глобальной области видимости:

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;
}

Здесь также нет смысла возвращать 'значение', поскольку оно устанавливается в обработчике событий ... ничего не будеттам (или просто старое значение) в точке возврата.

0 голосов
/ 04 ноября 2010

Вы не можете получить доступ к вашей переменной значения вне функции, в которой она была объявлена. Это называется областью действия переменной.Прочитайте о области видимости переменной здесь

Если вы хотите иметь возможность доступа к переменной, вы должны находиться в области действия, по крайней мере такой же общей, как та, в которой она была объявлена.

Так что в этом случае:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...