0

我正在尝试使用 JavaScript,但我的浏览器拒绝执行我使用 switch case 函数编写的程序。目标是查找字符串中元音的数量(考虑全部以小写字母输入)

当我单击“提交”按钮时,框中的文本消失但没有任何反应。警报“你好”也没有出现,所以我假设该函数甚至没有被执行。

   <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] 当我单击“提交”按钮时,框中的文本会消失,但没有任何反应。警报“你好”也没有出现,所以我假设该函数甚至没有被执行。

您需要使用 onSubmit 事件而不是 onClick 处理程序,如下所示:

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