您现在的位置是:网站首页 > 心得笔记

为什么jquery在each()中使用return false 不起作用?

盛悦2019-01-15529人围观
简介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("鼠标经过了");
    });
}

至此,完美解决。