2012-02-07 62 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事件,VAR ArrowFlag应该有0值。

但是,当您有keyUp事件后input:focus var ArrowFlag的值将是1。为什么?看起来像我的var ArrowFlag从未有过它的价值改变。

回答

1

您已经定义了两个独立的变量称为ArrowFlag,如果你想他们是同一个变量从一个的focusIn回调内取出了var:

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 2012-02-07 10:09:46

+0

@NewUser的例子做工精细我已经加入到我的回答 – 2012-02-07 10:58:38

+0

它不工作!错误来自语法错误。 – Iladarsda 2012-02-07 11:10:01

3

这是关于变量的范围。 从var ArrowFlag = "0"中删除“var”,并阅读http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/或关于它的众多other articles之一 - 你会很高兴你做到了。

+0

OK。我改变了这一点。但是,仍然当'onKeyUp'' ArrowFlag =“1”' - 看起来像我的'focusin()'被忽略。 – Iladarsda 2012-02-07 10:09:23

+0

把一个'警报( '!');'或更好,一个'的console.log( '!');'(如果你使用Firebug或Chrome的控制台等)进入的focusIn()函数,看它是否被称为。 – 2012-02-07 10:18:26

+0

好的 - 它确实有效! 'http:// jsfiddle.net/u8Cr2/9 /'非常感谢。 – Iladarsda 2012-02-07 11:09:35

1

在javascript中的变量被定义为函数,您在隐藏外部ArrowFlagfocusin匿名函数中声明另一个ArrowFlag。你并不需要再次申报ArrowFlag(通过使用var),请尝试以下操作:

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

var声明一个变量在目前情况下,顶上下文中的DOM窗口。

掉落在函数中var以避免在不同的上下文中重新声明相同名称的变量。 OK。