js 方法中return不是不往下执行了吗,怎么还会执行

$scope.add = function(){
    $(".showdetailsadd input").each(function () {
        console.log( $(this).parent().find(".colr").length == 1 && $(this).val() == "" )
        if ($(this).parent().find(".colr").length < 1 && $(this).val() == "") {
            nonull = $(this).siblings().find("span").eq(0).text();
            console.log(nonull);
            return false;
        }
    })
    if (nonull) {
        console.log(nonull);
        $scope.XHRmessage_show = nonull + "输入有误或未输入";
        $scope.message_show_f = true;
        $timeout(function () {
            $scope.message_show_f = false;
        }, 2000)
        return false;
    }
}

为什么进到if ($(this).parent().find(".colr").length < 1 && $(this).val() == "")条件中,已经return了,还是会进到if(nonull)条件中,

望大佬指导

阅读 12.8k
5 个回答

你在if ($(this).parent().find(".colr").length < 1 && $(this).val() == "")条件中只是跳出了 $(".showdetailsadd input").each()的循环,并没有终断函数,所以跳出循环继续执行了

$scope.add = function () {

    $(".showdetailsadd input").each(function () {

        console.log($(this).parent().find(".colr").length == 1 && $(this).val() == "")
        if ($(this).parent().find(".colr").length < 1 && $(this).val() == "") {
            nonull = $(this).siblings().find("span").eq(0).text();
            console.log(nonull);
            return false;            // 跳出当前$(".showdetailsadd input").each()的循环, 并不是函数的return
        }
    })

    //继续往下执行

    if (nonull) {
        console.log(nonull);
        $scope.XHRmessage_show = nonull + "输入有误或未输入";
        $scope.message_show_f = true;
        $timeout(function () {
            $scope.message_show_f = false;
        }, 2000)
        return false;
    }

}

在jquery的each()里用return false; == 正常forbreak;
break;只是跳出循环,不会结束方法

兄弟一个函数里面的return只能结束当前函数在这里就是

function () {
        console.log( $(this).parent().find(".colr").length == 1 && $(this).val() == "" )
        if ($(this).parent().find(".colr").length < 1 && $(this).val() == "") {
            nonull = $(this).siblings().find("span").eq(0).text();
            console.log(nonull);
            return false;
        }
    }
    

建议看下JS的书。JS这门语言了解不够。

return跳出当前函数,你仔细看一下each方法,跳出的只是each其中一个回调函数,而不是each方法本身。

把 each 換成 every 然後再想停止的時候 return false

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏