zoukankan      html  css  js  c++  java
  • 如何动态确认每个输入的值都符合设定域

     问题背景:从数据库循环读取数据写在表格中,第十行填写金额,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 ̄)づ╭❤~

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

  • 相关阅读:
    装饰器
    函数的初识
    python的文件操作
    深浅copy
    set集合,是一个无序且不重复的元素集合
    基础数据类型 :字典
    列表的增删改查
    易错点 默认参数陷阱
    js中Array对象常用方法
    printf用法demo
  • 原文地址:https://www.cnblogs.com/6luv-ml/p/6769510.html
Copyright © 2011-2022 走看看