jquery插件函数返回值

时间:2010-02-08 16:25:26

标签: javascript jquery

我从我的jquery插件中删除了所有关于这个问题的逻辑,但我的问题是,当我调用我的函数checkValidationName时,它确实是这样,并将name =设置为true。然后当我尝试在我调用它之后比较它时,值为false。这是为什么?

 (function($){  
       $.fn.validate = function() {     

            var name = false;

            $('.submitBtn').click(function() {


                 $.fn.validate.checkValidationName(nameValues);


                 **console.log("name = "+name); **//but this prints out "false"****
                 //shouldn't this be true since name returned true in the actual function??


                 }
            });

            $.fn.validate.checkValidationName = function(id) {
                 $.post("PHP/submitButtonName.php", {checkValidation: id},
                     function(data) {

                          **console.log("name = "+name); **//this prints out "true"**** 
                          //name is equal to true here

                     }, "json");
            };

      }    
 })(jQuery);  

2 个答案:

答案 0 :(得分:1)

这是因为checkValidationName中对$ .post()的调用是异步的。当您调用以下行...

$.fn.validate.checkValidationName(nameValues);

几乎立即执行下一行 - 很快就会得到$ .post()的结果,无论如何。

答案 1 :(得分:1)

那是因为AJAX请求是异步的,就在你调用checkValidationName之后,它还没有完成。您需要在回调中进行比较。

您可以让checkValidationName进行回调并在验证时调用结果:

(function($){
    $('.submitBtn').click(function() {
        $.fn.validate.checkValidationName(nameValues, function(valid) {
            console.log(valid);
        });
    });

    $.fn.validate.checkValidationName = function(id, callback) {
         $.post("PHP/submitButtonName.php", {checkValidation: id},
             function(data) {
                var valid = data.foo; // or however you determine that

                callback(valid); // call callback
             }, "json");
    };
}(jQuery));