基本Javascript-变量范围混淆

基本Javascript-变量范围混淆,javascript,if-statement,Javascript,If Statement,我有一个包含两个html表单的网页,每个表单都有一个提交按钮。我想确保用户在进入第二个表单之前,先单击第一个表单上的提交按钮 我脑子里有一个javascript: <script type="text/javascript"> <!--Script to block date changes when price changes pending var priceflag = 0; function pricechange() { var priceflag = 1;

我有一个包含两个html表单的网页,每个表单都有一个提交按钮。我想确保用户在进入第二个表单之前,先单击第一个表单上的提交按钮

我脑子里有一个javascript:

<script type="text/javascript">
<!--Script to block date changes when price changes pending
var priceflag = 0;  
function pricechange() {
var priceflag = 1;  
}
function pricesubmit() {
var priceflag = 0;  
}
function datechange() {
    if (priceflag == 1){
alert ("Please click \"Submit\" before you move on to the dates.");
    }
}
-->
</script>

那么,非常缩写的形式是:

<form action="<?php $_SERVER['PHP_SELF']?>" method="post" name="seasonprice">
<input name="price" value="<?php echo $price ?>" type="text" size="7" maxlength="7" onChange="pricechange()">
<input name="price2" value="" type="text" size="7" maxlength="7">
<input name="submit" type="submit" value="Submit" onClick="pricesubmit()">
</form>
<br>
<br>
<form id="addseason" action="<?php $_SERVER['PHP_SELF']?>" method="post" name="addseason">
<input name="FromDate" type="date" value="2013-01-01" size="16" onMouseDown="datechange();">
</form>

当您使用
var
时,您正在声明一个局部变量。因此,在代码中有3个不同的变量:全局
priceflag
pricechange
中的
priceflag
pricesubmit
中的
priceflag

此外,如注释中所建议的,在需要布尔值的地方使用布尔值(true/false)

类似的方法也可以(注意函数中缺少的
var
s):

有用的内容如下:


请使用布尔值表示布尔值。我也会考虑把它命名为与它的功能相关的东西。我建议把这个问题的标题改成与这个问题相关的东西,因为“基本JavaScript”除了提供与JavaScript相关的信息之外,还没有其他信息,JavaScript标签已经提供了它。对,公平点。我确实是从布尔开始的,只是在我试图让它工作时才改成整数。谢谢,@bažmegakapa。我现在快到了。一旦你指出,你关于全局变量和局部变量的观点就很明显了。我最初是用布尔数开始的,但在我试图找出问题的时候用数字代替了。现在它几乎可以工作了,但是我有一点问题,函数之间互相绊倒了。如果用户更改“price”,然后使用鼠标将光标放在“FromDate”上,似乎两个函数都试图同时触发,导致第二个函数(显示所需警报)不起作用。我想我需要使用各种各样的onXxxx位,尽管我不确定我将如何解决它。最终,通过onChange、onClick、onMousedown和onMouseover的混合,它开始工作了。有点乱,但它的工作!
var priceflag = false;  
function pricechange() {
    priceflag = true;  
}
function pricesubmit() {
    priceflag = false;  
}
function datechange() {
     if (priceflag){
         ...
     }
}