我有一个小的验证脚本,工作正常。脚本的最后一部分表示如果成功则返回true
。我已经测试了脚本,它已达到这一点,但它没有返回true
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!");
}
});
答案 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)建议