jQuery函数不会返回true

时间:2014-10-23 11:40:41

标签: javascript jquery

我有一个小的验证脚本,工作正常。脚本的最后一部分表示如果成功则返回true。我已经测试了脚本,它已达到这一点,但它没有返回true

http://jsfiddle.net/5ycpdaja/

function validate(id){
    // checks only inputs with type "text" inside div id-calc
    // e.g #haveprice-calc or #dontknow-calc
    var div = $("." + id + "-calc");
    $(div).find("input[type = 'text']").each(function() {
        if(this.value == ""){
            $(this).addClass("errorInput");
        }else{
            $(this).removeClass("errorInput");
            return true;
        }
    });
}

我已经使用console.log进行了测试,并且它正好转到else语句,但当我查看它被调用的地方时,它将不会返回true

它应该将validate的结果分配给变量valid - 但这似乎总是undefined

$(".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!");
    }
});

1 个答案:

答案 0 :(得分:2)

实际上你应该做一个更全局的变量,因为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)建议