jquery / javascript - доступ к переменным извне функции - PullRequest
6 голосов
/ 23 августа 2010

Я пытаюсь использовать значение переменной вне функции, в которой оно было определено. Думал, что мне просто нужно объявить переменную вне функции, но это не обрезает ее.Должен быть легким для тех, кто знает?

Fiddle Here

jQuery(document).ready(function() {

    var readOut;
    var readOut2;

    $(document).mousemove(function(e) {
        readOut1 = e.pageX;
        readOut2 = e.pageY;
        $('#var1').html(readOut1);

    });

    $('#var2').html(readOut2);
})​

Спасибо всем, особенно Энди E с объяснениями и решением .

Ответы [ 4 ]

5 голосов
/ 23 августа 2010

Вы присваиваете переменные через функцию обратного вызова, которая зарегистрирована в обработчике событий. Это означает, что при запуске:

$('#var2').html(readOut2);

readOut2 имеет значение undefined , поскольку оно еще не было установлено функцией-обработчиком mousemove . Этот обработчик не будет запускаться до тех пор, пока текущий код в очереди не перестанет выполняться, а пользователь не будет двигать мышью Вы можете определить функцию в той же области видимости, что и переменные, и вызвать эту функцию из обработчика mousemove .

Re: ваши комментарии к другому ответу, вы можете использовать таймер:

jQuery(document).ready(function() {    
    var readOut1;
    var readOut2;

    $(document).mousemove(function(e) {
        readOut1 = e.pageX;
        readOut2 = e.pageY;
        $('#var1').html(readOut1);

    });

    window.setInterval(function () { 
        $('#var2').html(readOut2);
    }, 300);
})​;
2 голосов
/ 23 августа 2010

Полагаю, вы хотите отслеживать координаты курсора, проверьте обновленный исходный код:

jQuery(document).ready(function() {

    var readOut1;
    var readOut2;

    $(document).mousemove(function(e) {
        readOut1 = e.pageX;
        readOut2 = e.pageY;
        $('#var1').html(readOut1);
        $('#var2').html(readOut2);
    });

})​

http://jsfiddle.net/xSa2T/2/

1 голос
/ 23 августа 2010

но вы хотите использовать значение вне функции on mousemove

Поскольку переменные readOut1 и readOut2 могут быть не установлены до запуска обработчика события mousemove, у вас будетвызвать любой код, который будет использовать эти переменные из обработчика mousemove.

Пример:

$(document).mousemove(function(e) {
    readOut1 = e.pageX;
    readOut2 = e.pageY;

    doStuffWithReadOuts(/* possibly passing readouts as arguments instead... */);
});

function doStuffWithReadOuts() {
        $('#var1').html(readOut1);
        $('#var2').html(readOut2);
}
1 голос
/ 23 августа 2010

Похоже, проблема синхронизацииесть значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...