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;
}
}
jQuery的each使用陷阱的更多相关文章
- [经验] - JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案
最近在开发WSS RESTful服务的时候, 碰到了这些个纠结的问题. 在网上查找了半天, 找到n多种解决方案, 但是都是部分的, 要么是没有跨域的情况, 要么是没有post的情况, 要么不是用WCF ...
- JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案
JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案 最近在开发WSS RESTful服务的时候, 碰到了这些个纠 ...
- jquery load 陷阱【原】
基础写法 function load(targetId,templateName) { $("#"+targetId).load(contextPath+templateName) ...
- jquery mobile AJAX特性的陷阱
简单情况是 MVC 重定向,URL不变 试了N种方式,跳来跳去,无解,服务端跳,写JS跳,生成跳转中间页跳.失败 后来一看,明明已经跳到新页了,样式什么还是原页的,有点火大了. 出去溜一圈,喝杯水,和 ...
- 抛弃jQuery:Why?
原文链接:http://blog.garstasio.com/you-dont-need-jquery/ 我的Blog:http://cabbit.me/you-dont-need-jquery/wh ...
- JavaScript中的this陷阱的最全收集
JavaScript来自一门健全的语言,所以你可能觉得JavaScript中的this和其他面向对象的语言如java的this一样,是指存储在实例属性中的值.事实并非如此,在JavaScript中,最 ...
- JavaScript中的this陷阱的最全收集 没有之一
当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概 念,可能真解释不清楚.有句话这么说:如果你不能向一个6岁小孩解 ...
- JS魔法堂:jQuery.Deferred(jQuery1.5-2.1)源码剖析
一.前言 jQuery.Deferred作为1.5的新特性出现在jQuery上,而jQuery.ajax函数也做了相应的调整.因此我们能如下的使用xhr请求调用,并实现事件处理函数晚绑定. var p ...
- 转:JavaScript中的this陷阱的最全收集
在其他地方看到的,觉得解释的狠详细,特此分享 当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概念,可能真解释不清 ...
随机推荐
- 转://【MOS】关于在不同版本和平台之间进行还原或复制的常见问题 (文档 ID 1526162.1)--跨版本恢复
Questions and Answers 1) 我能用更高版本的 Oracle 还原或复制旧版本的数据库吗? 2) 我能在两个不同的补丁程序集之间进行还原或复制吗? 3) 我能在同一操作系统的不同版 ...
- automake - 使用 autotools 工具集
一般而言,对于小项目或玩具程序,手动编写 Makefile 即可.但对于大型项目,手动编写维护 Makefile 成为一件费时费力的无聊工作. 本文介绍 autotools 工具集自动生成符合 Lin ...
- windows下使用svn命令行
1.安装“Slik-Subversion-1.9.7-win32.zip”,将路径写入windows的path路径 2.在cmd下可以执行svn 3.应为tortoiseSVN的版本比1的版本低,导致 ...
- Luogu2398 GCD SUM
Luogu2398 GCD SUM 求 \(\displaystyle\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\) \(n\leq10^5\) 数论 先常规化式子(大雾 \[ ...
- 20175310 《Java程序设计》第7周学习总结
20175310 <Java程序设计>第7周学习总结 本周博客: https://www.cnblogs.com/xicyannn/p/10705376.html 教材学习内容总结 这周学 ...
- 工具篇-Java中一些utils
下边是整理的一些Java开发的utils,顺便吐槽下新浪博客的编辑器排版跟我写的博客一样 烂,所以改用博客园 一.字符串 1. Java中String与其他类型之间的转换 String与日期对象 pu ...
- Java常见的几种内存溢出及解决方案
1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn ...
- 从零开始搭建django前后端分离项目 系列三(实战之异步任务执行)
前面已经将项目环境搭建好了,下面进入实战环节.这里挑选项目中涉及到的几个重要的功能模块进行讲解. celery执行异步任务和任务管理 Celery 是一个专注于实时处理和任务调度的分布式任务队列.由于 ...
- JasperReport制作行内容合并的表格
效果图: 实现思路一: 交叉表 另一个思路: 普通表格 缺点:无法实现内容 垂直居中显示 准备工作 一.数据准备 DROP TABLE IF EXISTS `address_item_sex_valu ...
- git学习之时光穿梭机
"x"修改readme.txt文件,改成如下内容: Git is a distributed version control system. Git is free softwar ...