如何动态确认每个输入的值都符合设定域

 问题背景:从数据库循环读取数据写在表格中,第十行填写金额,onblur时判断是否高出同行第二列,高出则报错,反之不报错。修改错误数据,信息会被擦除。

遇到的问题:第一行报错情况下,第二行填写正确信息也会擦除错误提示。

目的:只要存在错误就显示错误信息,修改错误(没有完全修改完)保留错误,完全修改完毕才能擦除错误

html代码

为了良好的抓取输入框值,使用动态添加id形式,在PHP中{$key}从0开始递增。this.id返回该输入框ID。

 id="apply_{$key}" onblur="num_check(this.id)" 

 js代码

将错误ID存入数组,修改正确则删除数组对应元素。存在错误ID,则保留错误信息。错误数组没有信息时,才允许擦除信息。

 1 var err_arr = new Array();
 2     function arr_check(id){
 3         for(var i=0;i<err_arr.length;i++){
 4             if(id==err_arr[i]){
 5                 return true;
 6             }
 7         }
 8         return false;
 9     }
10     
11     var numFlag = true;
12     function num_check(id) {
13         
14         var money = $('#'+id).val();
15         var numMsg = $("#numMsg");
16         var publish_amount =$('#'+id).parent().parent().children('td:nth-child(2)').find('span').text();
17         publish_amount =  commafyback(publish_amount); //去除千分位
18         if (money == '') {
19             $(id).val('0');
20         } else if (money > publish_amount) {
21             
22             if(!arr_check(id)){
23                 err_arr[err_arr.length]=id;
24                 numMsg.text('数额不能超过发行金额');
25             }
26             numFlag = false;
27         } else {
28             
29             if(arr_check(id)){
30                 err_arr.splice($.inArray(id,err_arr),1);
31                 if(err_arr.length<1){
32                     numMsg.text('');
33                     numFlag = true;
34                 }
35             }
36             
37         }
38     }

 经验总结

1.$('#'+id).val():最开始是$(id).val(),半天调不通还是null。后来才意识到,这个id只是传了id名称,但是实际上我们用的都是$('$Id名称').val()。这里还是要注意一下

2.$('#'+id).parent().parent().children('td:nth-child(2)').find('span').text():
这段代码对应的html是

 1 <tr>
 2     <td></td>
 3     <td><span>990,077</span></td>
 4     <td></td>
 5     <td></td>
 6     <td></td>
 7     <td></td>
 8     <td></td>
 9     <td></td>
10     <td></td>
11     <td>
12     <input ... id="apply_{$key}" onblur="num_check(this.id)"></td>
13 </tr>    

因为客户要求,需要在第三行添加【】,这样对数据提取有一定小麻烦,所以就在数字两边加了span,这样就好抓了。之前一直抓的是input等有value属性的标签,jQuery.val()竟然不起作用,后来改成text就完美了,这才知道标签框起来的应该是html和text(是这意思吧……)。

第12行,利用循环特点,给输入框设置id和onblur事件,最开始以为是输入框的同级,就向上查找,结果当然是空空如也。后来就连续父级查找。就可以了。经同事建议,改成parents会不会简单点,测试结果是这样会读取到所有的行的第二列。这就很尴尬了。我只要同行第二列比较。所以不得不改成多次父级查找形式。

3.这也是重点,多次尝试不同方法,找到了能行得通的方法中看得顺眼的。

一个输入框的onblur担负着好多责任。不仅是判断“这个”输入框是否错误(错误报错)或是改正了错误(改正要擦除),还是本身就输入正确(不应该出现错误提示)的判断。可这也出现了问题就是第一行出错且报错的前提下,第二行输入正确,报错信息被擦除了……

看来这个onblur还要肩负另一项使命,就是能够存储错误条目——条目存在就保留错误信息,只有没有了错误才会擦除错误信息。反复试验多次,终于解决了。


搞了半个小时,终于弄通了。jQuery不太会,一点一点查,惊喜还不少。

又一个原创文章,给自己赞一个~

这一定还不是最优方法,如果阅读这篇文章有兴趣的朋友可以和我讨论一下~还请赐教嘿嘿

(づ ̄3 ̄)づ╭❤~

 如果你觉得本文不错,想要转载,还请希望注明出处~毕竟自己做的不容易~嘿嘿

原文地址:https://www.cnblogs.com/6luv-ml/p/6769510.html