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

このようなものは機能するはずです(テストされていませんが、アイデアを示しています):

<!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>

ゾーンオブジェクトの大陸プロパティをカスタムラベルにマップする場合は、2番目のオブジェクトを定義できます(上記のコードを編集しました)

アップデート:

さらにゾーンを追加する場合は、新しいゾーン配列を追加する必要があります。

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

これをzonesオブジェクトに追加します。

zones.australia = zone4;

そして、zoneLabelsオブジェクトにエントリを追加します。

zoneLabels.australia = "Australia";
于 2012-08-17T11:26:33.457 に答える
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を返すだけなので、これは仕様によるものだと思います。私はそれをreturnステートメントのない関数として取り出しましたが、これは偽の値であるundefinedを返します。

于 2012-08-17T12:20:29.807 に答える