我想学习,如何从Javascript中的连续函数返回布尔值?如果上一个函数返回true,我想运行下一个函数。例如,有一个主函数,有3个子函数。
它将是这样的:运行第一个函数,如果它返回true,运行第二个函数,如果第二个函数返回true,运行第三个函数,如果第三个函数返回true,那么main函数也返回true。
有人能告诉我一个简单的例子。我写了一个例子,但它总是返回false :)我想学习逻辑上最好的方法。谢谢大家吧:)
我的例子:
var uname;
$("#username").keyup(function() {
uname = checkUsername();
console.log(checkUsername());
}); // Username keyup
function allowedChars() {
var username = document.getElementById("username").value;
var chars = /^[a-zA-Z0-9\.\_]*$/;
if(chars.test(username) == true) {
$("#notName").html("").show();
return true;
}
else {
$("#notName").html("Username can just contain A-Z, 0-9, dot and underscore!").show();
return false;
}
} // allowedChars
function unameLen() {
var username = document.getElementById("username").value;
if ((username.length > 3) && (username.length < 20)) {
$("#notName").html("").show();
return true;
}
else {
$("#notName").html("Username must be between 3 and 20 characters!").show();
return false;
}
}
function unameAvl() {
var username = document.getElementById("username").value;
$.post("check.php", { username: username },
function(result){
if (result == true) {
$("#notName").html("").show();
return true;
}
else {
$("#notName").html("Username is already exists!").show();
return false;
}
});
}
function checkUsername() {
allowedChars();
if (allowedChars()) {
unameLen();
}
if (unameLen()) {
unameAvl();
}
if (unameAvl()) {
return true
}
else {
return false;
}
}
答案 0 :(得分:3)
您可以使用&&
运算符为您执行此操作,因为它实现了短路布尔逻辑。
将您的checkUserName
方法更改为此方法并查看其工作原理:
function checkUsername() {
return allowedChars() && unameLen() && unameAvl();
}
在这种情况下,当allowedChars
返回true时,它将接下来调用unameLen
。如果unameLen
返回true,则会调用unameAvl
。如果任何函数返回false,checkUsername函数将返回false,如果它们都返回true,则返回true。
这也将修复unameAvl
的返回值,以便返回一个布尔值,而不是未定义。
function unameAvl() {
var success = false;
var username = document.getElementById("username").value;
$.post("check.php", { username: username },
function() {
$("#notName").html("").show();
success = true;
}
}).fail(function() {
$("#notName").html("Username is already exists!").show();
success = false;
});
return success;
}
jQuery的$.post
不希望回调成功返回值,因此返回值被丢弃。必须从函数设置unameAvl
的返回值,因此它必须通过变量(success
)传达该状态。
回调函数的参数也不正确。 jQuery将回调函数的签名记录为Function(PlainObject data, String textStatus, jqXHR jqXHR)
,但是使用的实际函数具有Function(boolean result)
的错误签名。函数参数不会在回调函数中使用,因此可以(并且)安全地省略参数列表。
仅在成功时调用回调,因此还需要提供失败回调。这是通过链接到$.fail
调用的$.post
方法完成的。
请参阅以下文档页面:
所有这些更改共同使Ajax调用正常工作并正确报告成功状态作为unameAvl
的返回值。这正确地允许短路逻辑按预期工作。