0

好吧,我絕對困惑,爲什麼這不是在textarea返回6。它不會返回任何東西。 我認爲它與js範圍有關,但我無法弄清楚。在javascript中的變量範圍的問題

<body> 

    <script language="Javascript"> 
    var broj = 5; 

    function Inci(){ 
    var broj++; 
    document.frmMain.VrsteHolder.value = broj; 
    } 

    </script> 

    <form name="frmMain" method="get" action="script.php"> 

    <textarea name="VrsteHolder" rows="4"> </textarea> 
    <input type="button" value="Dodaj porudzbinu" name="buttonDodaj" onClick="Inci();"/> 

    </form> 

</body> 
+0

已經給出了正確的答案,但是如果您想了解更多關於js範圍的知識,請閱讀以下內容:http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Histing + – 2011-02-08 23:24:58

回答

3

得到Inci函數內擺脫var關鍵字。

varredeclares變量在當前範圍內,所以它會重新聲明brojInci每次調用。

這將是正確的做法:

var broj = 5; 

function Inci(){ 
    document.frmMain.VrsteHolder.value = ++broj; 
} 
+0

+1通常爲1在函數內部使用`var`是爲了讓外部變量保持原樣(例如,你在外面有var`hey`,並且需要在函數中使用相同的名字,而不需要編輯全局變量) – JCOC611 2011-02-08 23:03:41

+0

好的,我那樣做了,但是現在導致textarea是NaN。沒有數字6,因爲我預期。 – 2011-02-08 23:08:15

+1

@stanislav適合我:http://jsfiddle.net/aKFyD/ – 2011-02-08 23:19:20

0

因爲var關鍵字定義變量。從你的函數刪除var

function Inci(){ 
    broj++; 
    document.frmMain.VrsteHolder.value = broj; 
    } 
0

的問題是var爲其他答案細節,重新聲明的變量,或試圖來寧,居然扔,因爲相結合的語法錯誤。

順便雖然那我看到少:別忘了你可以增加和具有++(increment operator前的變量立即得到結果,例如:

function Inci(){ 
    document.frmMain.VrsteHolder.value = ++broj; 
} 

You can test that version out here