2012-02-07 3 views
2

Могу ли я получить доступ и изменить значение var вне пределов этой функции?javascript - доступ и изменение значения var извне функции

var ArrowFlag = "1"; 

    $('input, textarea, select').focusin(function() { 
     var ArrowFlag = "0"; 
     //console.log(ArrowFlag) will = 0 
    }); 

    $(document).bind('keyup', function() { 
    // When input:focus console.log(ArrowFlag) will = 1 
    }); 

Если у вас есть input:focus событие, вар ArrowFlag должен иметь значение 0.

Но, если у вас есть keyUp событие после input:focus var ArrowFlag значение будет 1. Зачем? Похоже, мой var ArrowFlag никогда не менял свою ценность.

ответ

1

Вы определили два отдельных переменных, называемых ArrowFlag, если вы хотите, чтобы они были той же переменной удалить вар из одного внутри focusin обратного вызова:

var ArrowFlag = "1"; 

$('input, textarea, select').focusin(function() { 
    ArrowFlag = "0"; 
    //console.log(ArrowFlag) will = 0 
}); 

$(document).bind('keyup', function() { 
    // after focusin ArrowFlag will now be 0 
}); 

Пример - http://jsfiddle.net/yyLPE

+0

Спасибо, что нашли время. Я изменил это. Но, все же, когда 'onKeyUp'' ArrowFlag = "1" '- выглядит так, как мой' focusin() 'игнорируется. – Iladarsda

+0

@NewUser Прекрасно работает в примере, который я добавил к моему ответу –

+0

Это действительно работает! Ошибка исходила из синтаксической ошибки. – Iladarsda

3

Это все о переменной области. Извлеките «var» от var ArrowFlag = "0" и прочитайте http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/ или об одном из многих other articles об этом - вы будете рады, что сделали.

+0

ОК. Я изменил это. Но, все же, когда 'onKeyUp'' ArrowFlag = "1" '- выглядит так, как мой' focusin() 'игнорируется. – Iladarsda

+0

Поместите 'alert ('!');' Или, лучше, 'console.log ('!');' (Если вы используете firebug или консоль Chrome и т. Д.) В функцию focusin(), чтобы увидеть, вызывается. –

+0

Хорошо - это действительно работает! 'http: // jsfiddle.net/u8Cr2/9 /' Большое спасибо. – Iladarsda

1

В JavaScript переменные , вы объявляете еще один ArrowFlag внутри анонимной функции focusin, которая скрывает внешний ArrowFlag. Вам не нужно объявлять ArrowFlag снова (с помощью var), попробуйте следующее:

var ArrowFlag = "1"; 
$('input, textarea, select').focusin(function() { 
    ArrowFlag = "0"; 
}); 
1

var объявляет переменную в текущем контексте, верхний контекст будучи окна DOM.

Оставьте var в функции, чтобы избежать повторного использования переменной с тем же именем в другом контексте.

Смежные вопросы