注意: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;
        }
    }

jQuery的each使用陷阱的更多相关文章

  1. [经验] - JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案

    最近在开发WSS RESTful服务的时候, 碰到了这些个纠结的问题. 在网上查找了半天, 找到n多种解决方案, 但是都是部分的, 要么是没有跨域的情况, 要么是没有post的情况, 要么不是用WCF ...

  2. JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案

    JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案 最近在开发WSS RESTful服务的时候, 碰到了这些个纠 ...

  3. jquery load 陷阱【原】

    基础写法 function load(targetId,templateName) { $("#"+targetId).load(contextPath+templateName) ...

  4. jquery mobile AJAX特性的陷阱

    简单情况是 MVC 重定向,URL不变 试了N种方式,跳来跳去,无解,服务端跳,写JS跳,生成跳转中间页跳.失败 后来一看,明明已经跳到新页了,样式什么还是原页的,有点火大了. 出去溜一圈,喝杯水,和 ...

  5. 抛弃jQuery:Why?

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/ 我的Blog:http://cabbit.me/you-dont-need-jquery/wh ...

  6. JavaScript中的this陷阱的最全收集

    JavaScript来自一门健全的语言,所以你可能觉得JavaScript中的this和其他面向对象的语言如java的this一样,是指存储在实例属性中的值.事实并非如此,在JavaScript中,最 ...

  7. JavaScript中的this陷阱的最全收集 没有之一

    当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概 念,可能真解释不清楚.有句话这么说:如果你不能向一个6岁小孩解 ...

  8. JS魔法堂:jQuery.Deferred(jQuery1.5-2.1)源码剖析

    一.前言 jQuery.Deferred作为1.5的新特性出现在jQuery上,而jQuery.ajax函数也做了相应的调整.因此我们能如下的使用xhr请求调用,并实现事件处理函数晚绑定. var p ...

  9. 转:JavaScript中的this陷阱的最全收集

    在其他地方看到的,觉得解释的狠详细,特此分享 当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概念,可能真解释不清 ...

随机推荐

  1. PHPsql

    下面员工3的薪水大于其主管的薪水,一条SQL找到薪水比下属低的主管 id username salary pid 1 a 3000 null 2 b 8000 null 3 c 5000 1 4 d ...

  2. len()方法

    len() 方法返回对象(字符.列表.元组等)长度或项目个数 len()方法语法: len( 对象 )

  3. 应对WannaCry勒索危机之关闭445端口等危险端口——以本人Windows7系统为例

    应对WannaCry勒索危机之关闭445端口等危险端口--以本人Windows7系统为例 近日,全球范围内爆发WannaCry勒索病毒危机 我国很多大学纷纷中招.受灾严重,甚至连刘老师的电脑也-- 拿 ...

  4. 测试 Flask 应用

    测试 Flask 应用 没有经过测试的东西都是不完整的 这一箴言的起源已经不可考了,尽管他不是完全正确的,但是仍然离真理不远.没有测试过的应用将会使得提高现有代码质量很困难,二不测试应用程序的开发者, ...

  5. 使用 ctypes 进行 Python 和 C 的混合编程

    Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法. 初识 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库 ...

  6. Emacs 中 GDB 的使用

    Emacs 提供了方便的 GDB 调试功能,使用方法简明如下, 1. 编译时加入调试信息, 例如: $ clang++ -g -Wall t.cpp -o t 2. 调试 t ,直接用命令 M-x g ...

  7. 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装配置数据库,使用Navicat for MySQL和手机APP 连接测试)

    2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(数据库简单说明) https://www.mysql.com/ 咱用安装版的 我把自己下载的放在了这里 现在 ...

  8. C# 中使用log4.net的注意事项

    新建Log4Net.config文件,内容为 <?xml version="1.0" encoding="utf-8" ?> <configu ...

  9. 1、c++对c语言的扩展

    1.类型增强 检查更加严格 比如,把一个 const 类型的指针赋给非 const 类型的指针.c 语言中可以通的过,但是在 c++中则编不过去 ; int b = a; const int *pa ...

  10. java 基础04 重写