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有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概念,可能真解释不清 ...
随机推荐
- MYSQL学习笔记——sql语句优化工具
优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...
- modbus与rs485的关系_modbus与rs485的区别和联系
http://www.elecfans.com/tongxin/123/20180103610476.html 经常看到RS485和MODBUS写在一起,它们的区别和联系? RS485是一个物理接口, ...
- (二 -3-1) 天猫精灵接入Home Assistant-自动发现Mqtt设备--灯系列 esp8266程序
设备1 上电自动注册自己是个1个开关 HASS网页和手机APP控制 外部开关上升沿中断控制 天猫精灵语音控制 一键配网 记录以往WIFI信息 设备2 上电后,自动注册自己有三个开关控制 HASS网页和 ...
- Python-网络爬虫模块-requests模块之响应-response
当requests发送请求成功后,requests就会得到返回值,如果服务器响应正常,就会接收到响应数据: Response响应中的属性和方法 常用属性: status_code: 数据类型:int ...
- 深入源码理解ThreadLocal和ThreadLocalMap
一.ThreadLoacl的理解: 官方的讲: ThreadLocal是一个本地线程副本变量工具类,主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰 通俗的讲: Thre ...
- 将Oracle 12c的某用户数据迁移至OracleXE的用户
前言:OracleXE全称为oracle database 11g express edition .Oracle Database 11g Express Edition是 Oracle 数据库的免 ...
- oracle expdp导出时报 ora-39070:无法打开日志文件
在通过expdp导出命令导出某个用户的对象时出现以下截图错误: ORA-39002:操作无效 ORA-39070:无法打开日志文件 ORA-39087:目录名<directory>无效 该 ...
- SQLSERVER操作字段约束,修改字段名称等
-- 表加注释EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'注释内容' , @level0type=N'SCHEM ...
- Pessimistic and Optimistic locking
事务隔离通常通过锁定任何对事务中资源的访问来实现的.总的来说,有两种方法针对事务的锁定:乐观锁(Pessimistic locking)和悲观锁(Optimistic locking) 悲观锁(Pes ...
- MySQL常用SQL语句/函数/存储过程
一句话总结 SELECT count(*) FROM user WHERE id>0 GROUP BY name HAVING count(*)>1 ORDER BY count(*)DE ...