Javascript jQuery函数不会返回true

Javascript jQuery函数不会返回true,javascript,jquery,Javascript,Jquery,我有一个小的验证脚本,它工作得很好。脚本的末尾表示如果成功,它应该返回true。我已经测试了脚本,它正在达到这一点,但它没有返回true 我已经使用控制台.log进行了测试,它可以很好地访问else语句,但是当我查看调用它的位置时,它不会返回true 它应该将validate的结果分配给变量valid——但这似乎总是未定义的 $(".btnCalc").click(function() { var id = this.id; var valid = validate(id);

我有一个小的验证脚本,它工作得很好。脚本的末尾表示如果成功,它应该返回
true
。我已经测试了脚本,它正在达到这一点,但它没有返回
true

我已经使用
控制台.log进行了测试,它可以很好地访问
else
语句,但是当我查看调用它的位置时,它不会返回
true

它应该将
validate
的结果分配给变量
valid
——但这似乎总是
未定义的

$(".btnCalc").click(function() {
    var id = this.id;
    var valid = validate(id);
    console.log(valid); // this always shows as undefined, even if the validation scrip was successful
    if (valid == true){
        console.log("validated!");
    }
});

实际上,您应该执行一个更全局的变量,因为jQuery本身是一个函数,所以它本身有一个返回值:

function validate(id){
    var div = $("." + id + "-calc");

    // set up a default return value
    var success = true;

    $(div).find("input[type = 'text']").each(function() {
        if(this.value == ""){
            $(this).addClass("errorInput");
            // instead of returning, set the value here
            success = false;
        } else {
            $(this).removeClass("errorInput");
        }
    });

    // return the value. Now your function will return the state of the value at that point.
    return success;
}
undefined
定义是正确的,因为包装函数不会向调用方返回任何内容

更新
我反转了@bux(和@Francesca)建议的函数

您的匿名函数返回true
validate()
不返回任何内容。return语句位于错误的函数中。我猜只有在所有字段都有效的情况下,它才会返回true。所以我认为
success
应该默认为
true
,并在if的第一部分设置为
false
。@bux是的,这可能是真的。我并没有真正追求实际的功能,而是追求返回值的概念。修改总是可能的:)这非常有效。我也加入了@bux的调整。谢谢你解释我的错误所在。@something这里你撤销了success-var声明,但是你仍然需要将success=false移到第一个if部分:)该死,我再次没有查看上下文,但是功能-\ux-将进一步撤销它。谢谢@Francesca
function validate(id){
    var div = $("." + id + "-calc");

    // set up a default return value
    var success = true;

    $(div).find("input[type = 'text']").each(function() {
        if(this.value == ""){
            $(this).addClass("errorInput");
            // instead of returning, set the value here
            success = false;
        } else {
            $(this).removeClass("errorInput");
        }
    });

    // return the value. Now your function will return the state of the value at that point.
    return success;
}