0

我写了这个小脚本。有人可以帮我解决这个问题吗

我在将数组的值与来自文本字段的用户输入进行数学运算时遇到问题。

我不确定是否需要使用 for 循环,但如果没有 for 循环,逻辑似乎很简单。

提前致谢

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">

var zone1 = new Array("london", "manchester", "spain", "paris");
var zone2 = new Array("newyork", "toronto", "los angeles", "vancouver");
var zone3 = new Array("delhi", "seoul", "moscow", "dhaka");

function validateForm()
{
var x=document.forms["myForm"]["fname"].value;

 if (x==zone1)
  {
  alert("You are in Europe");
  return false;
  }

  else if (x==zone2)
  {
  alert("You are in North America");
  return false;
  }

  else if (x==zone3)
  {
  alert("You are in Asia");
  return false;
  }

  else{
      alert("try again");
      return false;

  }




}
</script>
</head>

<body>
<form name="myForm" action="" onsubmit="return validateForm()" method="post">
Enter your City: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>

</html>
4

2 回答 2

0

可能的解决方案。

var zones = {
    "london" : "Europe",
    "newyork" : "North America",
    "delhi" : "Asia"
}

function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if( zones[ x ] ) {
        alert( "You are in " + zones[ x ] );
    } else {
        alert( "try again" );
    }
}

你只在你的函数中返回 false 所以我猜这是设计使然。我把它作为一个没有返回语句的函数返回 undefined ,这是一个虚假值。

于 2012-08-17T12:20:29.807 回答
0

像这样的东西应该可以工作(未经测试,但向您展示了这个想法):

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">

var zone1 = new Array("london", "manchester", "spain", "paris");
var zone2 = new Array("newyork", "toronto", "los angeles", "vancouver");
var zone3 = new Array("delhi", "seoul", "moscow", "dhaka");

var zones = {};
var zoneLabels = {};

zoneLabels.europe = "Europe";
zoneLabels.northamerica = "North America";
zoneLabels.asia = "Asia"; 

zones.europe = zone1;
zones.northamerica = zone2;
zones.asia = zone3;


function validateForm(){
    var x=document.forms["myForm"]["fname"].value;

    for (i in zones){
        var zone = zones[i];
        for(j in zone){
            if( x == zone[j]){
                alert("you are in " + zoneLabels[i]);
                return false;
            }
        }
    }

    alert("try again");
    return false;
}
</script>

<title>test</title>
</head>

<body>
<form name="myForm" action="" onsubmit="return validateForm()" method="post">
    Enter your City: <input type="text" name="fname">
    <input type="submit" value="Submit">
</form>
</body>

</html>

如果您想将区域对象的大陆属性映射到自定义标签,您可以定义第二个对象(我编辑了上面的代码)

更新:

如果你想添加更多的区域,你应该添加一个新的区域数组:

var zone4 = new Array("canberra","perth");

将此添加到区域对象:

zones.australia = zone4;

并在 zoneLabels 对象中添加一个条目:

zoneLabels.australia = "Australia";
于 2012-08-17T11:26:33.457 回答