问题背景:从数据库循环读取数据写在表格中,第十行填写金额,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 ̄)づ╭❤~
如果你觉得本文不错,想要转载,还请希望注明出处~毕竟自己做的不容易~嘿嘿