您现在的位置是:网站首页 > 心得笔记
为什么jquery在each()中使用return false 不起作用?
简介jquery 的 each 方法中如果 return true 相当于是 continue,而 return false 相当于是 break。 continue是结束单个循环 ,break是结束整个循环
一、问题:
之前在项目中,遇到在each()中使用return false;并不能终止程序的继续执行,不知道有没有人也遇到这样的困扰......
首选,需要知道的是jquery 的 each 方法中如果 return true 相当于是 continue,而 return false 相当于是 break。 continue是结束单个循环 break是结束整个循环
二、解决方案:
jquery中的each()中return false功能实现可以借助一个变量来实现:
$("input[name='cstanName_one[]']").each(function (i) { oneStanName[i] = $(this).val(); if ($(this).val() == '') { alert('规格一级规格名称不能为空'); one = 1; return false; } }); if(one == 1){ return false; }
如上所述,在each()中定义一个变量,在each()外通过这个变量设置return false终止程序的执行!
但是在最近的项目中又遇到了问题,使用在each之外,对变量进行判断后使用return false,报错return not in function......,后来研究一番居然牵扯出另外一个知识点:jquery动态增加的html元素,初始化设置在id或者class上的事件无效???why?
一般情况,我们会在页面初始化完成后对class定义一些全局事件,举个例子:
$(document).ready(function(){ $(".class").on("mouseover",function(e){ alert("鼠标经过了"); }); });
正常情况下,这样的写法是正确的。可是往往当我们需要通过jquery动态的添加一些html元素到界面时,会发现定义的全局方法对新增元素无效了,举个例子:
function addDom(){ $("#abc").append("<div class='class'></div>"); }
以前处理的方案是初始化事件时使用live,例如:
$(".class").live("mouseover",function(){ alert("鼠标经过了"); });
jquery 1.7.2 之后的版本不建议使用 live,提示live关键字无效,百度一下,原来在新版本的jquery中去掉了live关键字,新的写法如下:
$(document).ready(function(){ $(document).on("mouseover",".class",function(e){ alert("鼠标经过了"); }); }
至此,完美解决。