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 ̄)づ╭❤~

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

  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/6luv-ml/p/6769510.html
Copyright © 2011-2022 走看看