DWZ主從表界面唯一性驗證(自寫js)(二)


  上篇介紹了自寫js判斷的前三項,本篇博客介紹第四步,關於觸發課程代碼文本框的離開事件后,判斷一整列的課程代碼之間是否有重復的值。

  此問題可以提取為判斷一個數組里是否有重復值,重復值是什么。

 第四步→判斷界面唯一性,獲取各行code值。

  通過觀察,主從表下每一行的課程代碼文本框都有一個數組樣式的name屬性,如:name="courseList[#index#].code" 

  查看代碼可知,每一行的課程代碼都有不同的name,那么怎么獲取這些不同name的對象數組呢?

  

  通過反復試驗,我最后得出一種方法,步驟是:先獲得主從表內所有標簽為<input>的對象,然后通過獲取他們的name屬性的值,來匹配。

  具體匹配方法就是觀察各個name之間的不同。

  課程代碼對應的name類型為:name="courseList[#index#].code" 

  課程名稱對應的name類型為:name="courseList[#index#].name" 

  所以,通過觀察,只要匹配code字符串就可以獲取到一列的課程代碼的對象數組了。

  拿到這個數組,就開始遍歷,是否數組內有重復值,如果有重復值,就把它放在第三方的數組里,最后彈出框里顯示這些重復值。

  具體的js代碼如下:

  

 1   //4、判斷界面唯一性,獲取各行code值
 2    
 3             //4.1獲得code列
 4                      //4.11獲得表格
 5         var table = document.all("parentTable");
 6                     //4.12獲得表格下的所有文本框
 7         var input=table.getElementsByTagName("input");
 8                     //4.13定義一個空數組來裝得到的code列
 9         var resultCodeString=[];
10                    //4.14循環遍歷出code列,並將code文本框的值放到定義的空數組resultCodeString中
11             for(i=0;i<input.length;i++){
12                 //利用lastIndexOf來匹配,如果有code字符串則返回大於-1的值,
13                 if(input[i].name.lastIndexOf("code")>-1){
14                     //alert(input[i].value);
15                     //如果name中匹配到了code,則將這個文本框的值放到我們的code數組里。
16                     resultCodeString[resultCodeString.length] =input[i].value;
17                     
18                 }
19             }
20                    //測試數組容器的長度
21             //alert(resultCodeString.length);
22             //定義一個第三方數組,來裝重復值
23             var showMessage=[];
24             //遍歷得到的code數組容器
25             for(i=0;i<resultCodeString.length;i++){
26                 //測試是否是code列中的值
27                 //alert(resultCodeString[i]);
28                 //以下為判斷是否重復的方法,並將重復值放在數組里。
29                 //先排序
30                 var resultCode=resultCodeString.sort();
31                  for(var i=0;i<resultCodeString.length;i++){
32                      if(resultCodeString[i] != ""){
33                          if (resultCode[i]==resultCode[i+1]){
34                              showMessage[showMessage.length] =resultCode[i];
35                              }
36                      }
37                 
38                 }
39                 // alert(showMessage.length);
40                  // alert("數組重復內容為:"+showMessage[i]);
41                  
42                  //因為我們得到的重復數據會有重復的,所以需要數組去重,這里調用了unique方法,具體實現見下面的代碼
43                  var arr=showMessage.unique();
44                  if(arr!=""){
45                     // alert("課程代碼有重復,重復值為"+arr);
46                      alertMsg.warn( "課程代碼有重復,重復值為"+arr);
47                  }
48                     
49             }

 

  JS實現得數組去重的三種方法:借鑒於《三種常用的js數組去重方法》

  

 1 /* 第一種去重的方法 */
 2  /* Array.prototype.unique = function(){
 3         var res = [this[0]];
 4         for(var i = 1; i < this.length; i++){
 5             var repeat = false;
 6             for(var j = 0; j < res.length; j++){
 7                 if(this[i] == res[j]){
 8                     repeat = true;
 9                     break;
10                 }
11             }
12             if(!repeat){
13                 res.push(this[i]);
14             }
15         }
16         return res;
17     } */
18     /* 第二種去重的方法 */
19 /*     Array.prototype.unique = function(){
20     this.sort();    //先排序
21     var res = [this[0]];
22     for(var i = 1; i < this.length; i++){
23         if(this[i] !== res[res.length - 1]){
24             res.push(this[i]);
25         }
26     }
27     return res;
28 } */
29     /* 第三種去重的方法 */
30     Array.prototype.unique = function(){
31         var res = [];
32         var json = {};
33         for(var i = 0; i < this.length; i++){
34             if(!json[this[i]]){
35                 res.push(this[i]);
36                 json[this[i]] = 1;
37             }
38         }
39         return res;
40     }

  最后效果顯示:

  

  雖然已經觸發了課程代碼文本框來進行了驗證,但是如果用戶不看提示框,仍舊一意孤行,也不是辦法,所以后台仍要對應的判斷。具體后台怎么進行判斷,請看下篇博客分析。

 

 

 

 

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM