2012-02-07 49 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。