jQuery的each使用陷阱

注意:jQuery使用each()函数进行循环时发现return false不能阻止程序继续向下执行

 

原因如下:

 (1)开始还以为是jQuery的each()函数是异步执行的,所以导致出错,其实不是。

 (2)后来发现是因为在jQuery的each()函数中return false相当于break, return true相当于continue; 而且在each()函数内部不能使用break和continue关键字,否则报错。

 

解决方法如下:

使用return false跳出循环前定义一个标志位变量,跳出循环后可以通过这个标志位变量判断是return false还是return true

注意:如果是两层each()循环或者多层each()循环,则层层定义标志位变量并向上传播冒泡即可

 

代码如下:

var validateResult = validateEachOutWeightAndOutPackageNumber();
        if (!validateResult){
            return false;
        }


//验证每行的出库重量不能为空,出库件数不能为空及不能为负数
    function validateEachOutWeightAndOutPackageNumber() {
     //定义最外层循环的标志位变量
var _outerInvalid = false; $("#order_detail_table_list .table_sales_detail").each(function() {
       //定义内层循环的标志位变量
var _innerInvalid = false; var relativeThis = $(this); $(".wms_in_sheet_tr", relativeThis).each(function(){ var in_sheet_number = $("#wms_material_in_sheet_number", $(this)).text(); var out_weight = $("input[name*='wms_out_weight']", $(this)).val(); var out_package_number = $("input[name*='out_package_number']", $(this)).val(); if(out_weight.toString() == ''){ alert('入库单号' in_sheet_number '的出库重量不能为空');
            //使用标志位标量代替return false _innerInvalid
= true;
            //使用return false代替break
return false; }else if(out_weight <= 0){ alert('入库单号' in_sheet_number '的出库重量不能为0和负数'); _innerInvalid = true; return false; }else if(out_package_number.toString() == ''){ alert('入库单号' in_sheet_number '的出库件数不能为空'); _innerInvalid = true; return false; }else if(out_package_number < 0){ alert('入库单号' in_sheet_number '的出库件数不能为负数'); _innerInvalid = true; return false; } });
       //向外层标志位变量传播
if(_innerInvalid){ _outerInvalid = true; return false } });
     //最外层标志位变量判断是否应该return false还是return true
if(_outerInvalid){ return false }else{ return true; } }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值