注意: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. 转://WITH AS and materialize hints

    WITH AS: 就是将一个子查询部分独立出来,有时候是为了提高SQL语句的可读性,有时候是为了提高SQL语句性能. 如果一个SQL语句中,某个表会被访问多次,而且每次访问的限制条件一样的话,就可以使 ...

  2. 使用Nginx实现反向代理

    一.代理服务器 1.什么是代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务 ...

  3. 010_动态语言与鸭子类型及python2和3的区别

    一. 动态语言中经常提到鸭子类型,所谓鸭子类型就是:如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks like a duck, ...

  4. WiFi-ESP8266入门http(1)-建立服务器,直接发送网

    #include <ESP8266WiFi.h> /*** 该工程可以在2.4.0版本esp8266库中运行,没在更高版本库中进行测试 ***/ const char *ssid = &q ...

  5. 手动设定统计数据 set_table_stats

    PROCEDURE SET_TABLE_STATS Argument Name Type In/Out Default? ------------------------------ -------- ...

  6. node.js读写文件

    关于node.js的读写操作,应用场景有很多.比如其中这样的一个场景,如何获取全局的token.这就涉及到写和读操作了. 写操作: var fs = require("fs"); ...

  7. AT987 高橋君

    AT987 高橋君 给出 \(n,\ k\) ,求 \(\displaystyle\sum_{i=0}^kC_n^k\) , \(T\) 次询问 \(T\leq10^5,\ 0\leq k\leq n ...

  8. Python脱产8期 Day09 2019/4/23

    内存管理 一.引用计数:垃圾回收机制的依据 1.变量的值被引用,该值的引用计数 +12.变量的值被解绑,该值的引用计数 -13.引用计数为0时就会被垃圾回收机制回收 二.引用计数会出现循环引用问题:相 ...

  9. SimpleDialogBox

    import 'package:flutter/material.dart';import 'dart:ui';import 'dart:async';enum Option{A,B,C}void m ...

  10. python libnum库安装使用方法

    libnum库是一个关于各种数学运算的函数库,它包含common maths.modular.modular squre roots.primes.factorization.ECC.converti ...