jquery 的 each 方法中 return 的坑
转:
jquery 的 each 方法中 return 的坑
jquery 的 each 方法中 return 的坑
Chapter 0#
在项目中使用 jquery 的 each
方法时想在 each 的循环中返回一个布尔类型的值于是掉进一个坑中...
Chapter 1#
最初的代码:
这里的代码,虽然return 了,但是并未实际 return 值作为方法的返回值,而且还是继续往后执行。 在网上查询之后发现在 jquery 的 each
方法中如果 return true
相当于是 continue
,而 return false
相当于是 break
。
1 $(":checkbox[name='insurace-category']:checked").each(function (index, ele) {
2 var _item = $(".gift_option_item_" + $(ele).val());
3 if (_item && _item.length > 0) {
4 var _premium = $.trim($(_item).find(".custom_inputbox").eq(0).val());
5 var _selectElement = $(_item).find("select");
6 if (_selectElement && _selectElement.length > 0) {
7 var _amount = $.trim($(_selectElement).val());
8 if (!_amount) {
9 layer.msg("请选择保额!", function () {
10 $(_selectElement).focus();
11 });
12 return false;
13 }
14 }
15 if (!_premium) {
16 layer.msg("请输入保费!", function() {
17 $(_item).find(".custom_inputbox").eq(0).focus();
18 });
19 return false;
20 }
21 }
22 });
Chapter 2#
我的解决方案如下:
修改后的代码:
1 var _isInvalid = false;
2 $(":checkbox[name='insurace-category']:checked").each(function (index, ele) {
3 var _item = $(".gift_option_item_" + $(ele).val());
4 if (_item && _item.length > 0) {
5 var _premium = $.trim($(_item).find(".custom_inputbox").eq(0).val());
6 var _selectElement = $(_item).find("select");
7 if (_selectElement && _selectElement.length > 0) {
8 var _amount = $.trim($(_selectElement).val());
9 if (!_amount) {
10 layer.msg("请选择保额!");
11 $(_selectElement).focus();
12 _isInvalid = true;
13 return false;
14 }
15 }
16 if (!_premium) {
17 layer.msg("请输入保费!");
18 $(_item).find(".custom_inputbox").eq(0).focus();
19 _isInvalid = true;
20 return false;
21 }
22 }
23 });
24 if (_isInvalid) {
25 return false;
26 }
我这里借助了一个变量来辅助判断,当不满足条件时设置为 true
,在循环外判断这个变量的值,如果变量的值是 true
则证明又不合法的值,如果变量的值为 false
,则证明所需要判断的值都符合要求
Summary#
jquery each
方法中的 return 实际上是不会 return 啊,在 jquery each 方法中 return false
,可以借助一个外部变量来辅助实现我们想要的功能。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类: javascript
标签: javascript