日期:2014-05-17  浏览次数:20660 次

这个JS当发现重复值的时候就应该停止,为什么它还继续运行啊
如下是检查文本框是否存在重复值的,当发现重复值的时候就应该停止,为什么它还继续运行啊?
VBScript code

<script language="javascript">

function test() {
   
   var v1 = "";
   var v2 = "";
   var reRecords = new Array();
    var LEN =  document.getElementById("qty").value; //文本框的个数

   //通过两层 for 循环得到相同的元素,并加入到 reRecords 数组中 
   for(var i=1; i<=LEN ; i++) {
        if(document.getElementById("weeknumber" + i) != null) {
             v1 = document.getElementById("weeknumber" + i).value;
        }
        for(var j=i+1; j<=LEN ; j++) {
             if(document.getElementById("weeknumber" + j) != null) {
                   v2 = document.getElementById("weeknumber" + j).value;
                   if(v1 == v2) {
//alert("v2 = " + v2);
                            reRecords[reRecords.length] = v2;
                            break;
                   }
              }
         }
      }
//取得相同元素结束

//去掉 reRecords 数组中相同的元素,即:将含有相同元素的值用""来代替
   for(var i=0; i<reRecords.length; i++) {
        var s1 = reRecords[i];
        if(s1 == "") {
             break;
        }
        for(var j=i+1; j<reRecords.length; j++) {
             var s2 = reRecords[j];
             if(s1 == s2) {
                  reRecords[j] = "";
             }
        }
   }
//用 "" 代替元素结束

//数组中剩下的非 "" 元素就是最后想要的值,即:构造str的过程。
   var str = "\r\n";
   for(var i=0; i<reRecords.length; i++) {
        if(reRecords[i] != "") {
             str += reRecords[i];
             str += "\r\n";
             
             alert("發現重复的值是:" + str);str = ""; //重置 str 为空
             return false;
        }
   }
//构造str 结束

  

}
</script>


<form name="form1" onsubmit="test();" >
<% for i=1 to 5 %>
<input type="text" name="weeknumber<%=i%>" id="weeknumber<%=i%>"/><br />
<% next %>
<input name="qty" id="qty" type="hidden" value="<%= i-1%>" />
<input type="submit" name="button" id="button" value="提交" />
</form>




------解决方案--------------------
你的break只是中止了内层的for循环,外层的没有break。
------解决方案--------------------
直接return 不要 break;
------解决方案--------------------
当需要终止时 return false;就行了
------解决方案--------------------
楼主 你break只是跳出第一层循环,你说你的是两层嵌套,肯定退不出去么,就像8楼说的 ,你直接return了不就行了 。
------解决方案--------------------
按照层停止 break,按照全部停止,return.