0

我已阅读以下有关如何退出 javascript 函数的帖子:

如何退出 javascript 函数?

我正在尝试使示例适应我的代码,但我遗漏了一些东西/做错了什么。

我有以下 jquery 代码:

    $('#main_submit_button').live('click', function(){  

        check_for_duplicate_rule().done(function(result) {
                    console.log("result from check for duplicate" + result);
                    if (result == 'true') {                 
                        $('#validation_error').html("A similar rule already exists");
                        return;
                    }
            });
        //}
        console.log("i made it this far");
        return false;
        console.log($('#rule_form').serialize() );

}

当我使用重复数据进行测试时,系统会正确显示“类似规则已存在”的错误消息,但它还会在控制台中显示消息“我做到了这一点”。它不显示 form serialize() 命令的结果。我期待代码在设置错误消息后退出 .click 偶数处理程序。

我尝试将“return”语句更改为“return false”,但这也不起作用。你能告诉我我做错了什么吗?最终,我希望这个例程做的是在我将数据提交到服务器之前执行几个客户端验证检查。所以我将在函数中有多个点需要“返回”或退出。

谢谢

编辑 1

我已将代码更改为:

            var bduplicate = false;
            check_for_duplicate_rule().done(function(result) {
                    console.log("result from check for duplicate" + result);
                    if (result == 'true') {                 
                        $('#validation_error').html("A similar rule already exists");
                        bduplicate = true
                        return;
                    }
            });
        //}
        if (bduplicate) {
            return;
        }
        console.log("i made it this far");

但它仍然会打印出“我做到了这一点”的消息。我认为问题可能出在我的 check_for_duplicate_rule 函数上。?? 它看起来像这样:

    function check_for_duplicate_rule() {
            var parameters = {
                  num: $('#num').val(),
                  condition: $('#condition').val(),
                  cdidnumber: $('#cdidnumber').val()
            }   

            return $.getJSON(       
                    url = aURLdefinedsomewhere,
                    parameters,
                    function(data)  {
                            //if (data=='true') {                               
                                //$('#validation_error').html("A similar rule already exists");     
                            //}
                    }//end data
                );//end getJSON     
        }

我在控制台中看到的是在“我做到了这一点”之后打印了“检查重复真实的结果”消息,这似乎表明我正在检查我没有的结果... ? 如果这是真的,我真的不知道如何解决它。

4

3 回答 3

0

替换return falsereturn,然后之后的console.log将是未定义的!!!

return退出返回undefined的函数。

 $('#main_submit_button').live('click', function() {
        check_for_duplicate_rule().done(function(result) {
            console.log("result from check for duplicate" + result);
            if (result == 'true') {                 
                $('#validation_error').html("A similar rule already exists");
                return;
            }
        });
    //}
        console.log("i made it this far");
        return;//replace return false with return.
        console.log($('#rule_form').serialize() );//this will be undefined
    }

注意return返回未定义,不是false

  • break : 退出循环
于 2013-07-29T14:32:55.260 回答
0

要扩展@tymeJV 的评论,您的第一个回报是done异步返回函数。它对方法的其余部分没有影响。

于 2013-07-29T14:32:55.443 回答
0

return inside of.done(function(result) { })只是从这个函数中退出,而不是从.live('click', function(){ })

你应该像这样重写代码

$('#main_submit_button').live('click', function(){  

    result = check_for_duplicate_rule()
    console.log("result from check for duplicate" + result);
    if (result == 'true') {                 
                    $('#validation_error').html("A similar rule already exists");
                    return;
    }
    console.log("i made it this far");
    return false;
    console.log($('#rule_form').serialize() );
于 2013-07-29T14:38:21.950 回答