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