我已阅读以下有关如何退出javascript函数的帖子:
How can I exit from a javascript function?
我正在尝试将示例改编为我的代码,但我遗漏了某些内容/做错了什么。
我有以下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() );
}
当我使用重复数据进行测试时,系统会正确显示“类似规则已存在”的错误,但它也会在控制台中显示消息“我做到了这么远”。 它不显示表单serialize()命令的结果。 我期待代码在设置错误消息后退出.click even处理程序。
我尝试过更改将“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
}
我在控制台中看到的是“检查重复真实”的结果是在“我做到这么远”之后打印出来的,这似乎表明我正在查看我不知道的结果没有...?如果这是真的,我真的不知道如何修复它。
答案 0 :(得分:0)
将return false
替换为return
,之后console.log将被取消定义!!!
返回退出返回未定义的函数。
$('#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
答案 1 :(得分:0)
要扩展@ tymeJV的注释,您的第一个返回是异步返回done
函数。它对方法的其余部分没有影响。
答案 2 :(得分:0)
返回.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() );