在上述示例代码中,我试图获取val变量的值。我用全局范围声明了它。并添加一些控制台日志以验证值。但是在函数内部,它可以毫无问题地分配值。但是未声明函数val。这是为什么?
$.validator.addMethod("serialverify", function(){
var val;
$("#serialno").keyup(function(){
serial().done(function(data){
console.log('final = ' + data);
val = data;
console.log(val);
});
}); console.log(val);
return val;
}, "Please enter valid serial code");
答案 0 :(得分:3)
您的代码中有一个基本问题。分配是在回调函数中进行的,这意味着它仅在执行动作keyup
时执行。
但是,语句return val
是同步发生的。
建议-
您可以将其包装在某种约定中,并在执行resolve
时done
进行包装。 -
......done( function(data) { ..... resolve(val); })
或声明var val
;作为外部的全局变量,addMethod
函数