0

私は JavaScript を試していますが、私のブラウザーは、スイッチ ケース関数を使用して記述したこのプログラムの実行を拒否します。目標は、文字列内の母音の数を見つけることです (すべて小文字で入力されていると考えてください)。

「送信」ボタンをクリックすると、ボックスのテキストは消えますが、何も起こりません。アラート「hello」も表示されないので、関数が実行されていないことも想定しています。

   <html>
   <head>
   <script>
   function vow(form)
    {
     alert("hello");
     var a = new Array(10);
     a = form.t1.value;
     var flag = 0;
     var i;

     for(i=0;i<10;i++)
       {
     switch (a[i])
      {
       case 'a':
       flag++;
       break;

       case 'e':
       flag++;
       break;

       case 'i';
       flag++;
       break;

       case 'o';
       flag++;
       break;

       case 'u';
       flag++;
       break;
      }
      }
  alert(flag);  
  }
  </script>
  </head>

  <body>
  <form>

  <input type="text" name="t1">
  <input type="submit" value="SUBMIT" onClick="vow(this.form)"/>

  </form>
  </body>
  </html>
4

6 に答える 6

8

;の代わりに使用してい:ます。

case 'i';
      __^__

oとの場合も同じuです。

アップデート:

(メモリを大量に消費する) 代替バージョンも示します。

var count = input.match(/[aeiou]/gi).length;

アップデート:

var vow = function(str) {
    var matches = str.match(/[aeiou]/gi);
    var count = matches ? matches.length : 0;
    alert("'" + str + "' contains " + count + " vowel(s)");
    return false;
}​ ​

<input type="submit" value="SUBMIT" onClick="return vow(this.form.t1.value)"/>

ここで見ることができます

于 2012-10-16T18:36:04.417 に答える
5

もっと簡単にできます。たとえば、入力から母音を削除し、元の文字列と比較して長さの違いを確認します。

var count = input.length - input.replace(/[aeiou]/gi, '').length;

編集: または、さらに簡単に、母音以外のすべてを削除します ;-)

function vow(form) {
    alert(form.t1.value.replace(/[^aeiou]/gi, '').length);
}​
于 2012-10-16T18:36:37.153 に答える
3

プログラムの少し改善されたバージョン:

function vow(form) {
    var a = form.t1.value;
        flag = 0;

    for (var i = 0; i < a.length; i++) {
        switch (a[i]) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                flag++;
                break;
        }
    }
    alert(flag);
}​

http://jsfiddle.net/b36D6/

ただし、このタスクははるかに簡単に処理できます。

function vow(str) {
    return --(str.split(/[aeiou]/).length);
}

だから:vow("hello!")-> 2

于 2012-10-16T18:41:24.197 に答える
2

vow メソッドを単純化して、

function vow(form) {
  a = form.t1.value;

  var matches = a.toString().match(/[aeiou]/g);

  if( matches != null){
    alert(matches.length);
  } else {
    alert(0);
  }

}
于 2012-10-16T18:47:17.960 に答える
1

あなたが使用した

case 'i'; case 'o'; case 'u';

する必要があります

case 'i': case 'o': case 'u':

また、関数の最後に return false を使用します。

function vow(form)
{

    // code
    return false;
}

returnまた、次のように追加します

<input type="submit" value="SUBMIT" onClick="return vow(this.form)"/>

デモ

于 2012-10-16T18:45:33.973 に答える
0

[OP] [送信] ボタンをクリックすると、ボックスのテキストが消えますが、何も起こりません。アラート「hello」も表示されないので、関数が実行されていないことも想定しています。

次のように、onClick ハンドラーの代わりに onSubmit イベントを使用する必要があります。

  <input type="submit" value="SUBMIT" onSubmit ="vow(this.form)"/>
于 2012-10-16T18:39:04.393 に答える