javascript中的链接IF语句
每当我连续调用一个函数两次时,它只计算第二个函数并保留第一个函数。同样在链式IF语句中,它也不能像预期的那样工作。它总是跳转到“else”。这是我的密码javascript中的链接IF语句,javascript,Javascript,每当我连续调用一个函数两次时,它只计算第二个函数并保留第一个函数。同样在链式IF语句中,它也不能像预期的那样工作。它总是跳转到“else”。这是我的密码 if (valNames() && valEmail() && valUname()) { l1.hide(); l2.show(); } 更新以下是完整代码: <script type="text/javascrip
if (valNames() && valEmail() && valUname()) {
l1.hide();
l2.show();
}
更新以下是完整代码:
<script type="text/javascript">
$(document).ready(function () {
var cont = $('#cont');
var l1 = $('#l1');
var l2 = $('#l2');
var names = $("#names");
var uname = $("#uname");
var email = $("#email");
var err = $('#error');
email.blur(function () {
valEmail();
});
uname.blur(function () {
valUname();
});
l2.hide();
cont.click(function () {
if (valNames() == true && valEmail() == true && valUname() == true) {
l1.hide();
l2.show();
}
});
function valNames() {
if (names.val().length < 5) {
names.css({'border-color': 'red'});
return false;
} else {
names.css({'border-color': 'blue'});
return true;
}
}
function valEmail() {
if (IsEmail(email.val())) {
$.ajax({
dataType: "json",
url: "se.php",
type: "POST",
data: {'r': '648am', 'i': 'ee', 'd': email.val(), 't': 2},
success: function (data) {
if (data.data == false) {
email.css({'border-color': 'blue'});
err.hide();
return true;
} else {
email.css({'border-color': 'red'});
err.html("The email you entered already exists. <a href='login'>login?</a>");
err.show();
return false;
}
}
});
} else {
email.css({'border-color': 'red'});
return false;
}
}
function valUname() {
if (uname.val().length > 5) {
$.ajax({
dataType: "json",
url: "se.php",
type: "POST",
data: {'r': '648am', 'i': 'ue', 'd': uname.val(), 't': 1},
success: function (data) {
if (data.data == false) {
uname.css({'border-color': 'blue'});
err.hide();
return true;
} else {
uname.css({'border-color': 'red'});
err.html("The Username you entered already exists. <a href='login'>login?</a>");
err.show();
return false;
}
}
});
} else {
uname.css({'border-color': 'red'});
err.html("The Username you entered is too short.");
err.show();
return false;
}
}
});
</script>
$(文档).ready(函数(){
var cont=$('续');
变量l1=$(“#l1”);
变量l2=$(“#l2”);
变量名称=$(“#名称”);
var uname=$(“#uname”);
var email=$(“#email”);
var err=$(“#error”);
email.blur(函数(){
valEmail();
});
uname.blur(函数(){
valUname();
});
l2.hide();
继续单击(函数(){
if(valNames()==true&&valEmail()==true&&valUname()==true){
l1.隐藏();
l2.show();
}
});
函数valNames(){
if(names.val().length<5){
css({'border-color':'red'});
返回false;
}否则{
css({'border-color':'blue'});
返回true;
}
}
函数valEmail(){
if(IsEmail(email.val())){
$.ajax({
数据类型:“json”,
url:“se.php”,
类型:“POST”,
数据:{'r':'648am','i':'ee','d':email.val(),'t':2},
成功:功能(数据){
如果(data.data==false){
css({'border-color':'blue'});
err.hide();
返回true;
}否则{
css({'border-color':'red'});
html(“您输入的电子邮件已经存在。”);
err.show();
返回false;
}
}
});
}否则{
css({'border-color':'red'});
返回false;
}
}
函数名(){
如果(uname.val().length>5){
$.ajax({
数据类型:“json”,
url:“se.php”,
类型:“POST”,
数据:{'r':'648am','i':'ue','d':uname.val(),'t':1},
成功:功能(数据){
如果(data.data==false){
css({'border-color':'blue'});
err.hide();
返回true;
}否则{
css({'border-color':'red'});
html(“您输入的用户名已经存在。”);
err.show();
返回false;
}
}
});
}否则{
css({'border-color':'red'});
html(“您输入的用户名太短。”);
err.show();
返回false;
}
}
});
通过在valEmail
和valUname
中使用$.ajax
可以发出异步请求,这意味着函数总是在请求完成之前返回。由于在$.ajax
行之后没有显式返回,因此函数返回未定义的
,该函数被视为false
。从这个意义上说,valEmail
和valUname
将始终返回false
您最好的选择是完全更改逻辑,并采用如下方式:
$.ajax({ // first request to validate email
...,
success: function() {
...
if (emailValid) {
$.ajax({ // second request to validate username
...,
success: function() {
if (usernameValid && valNames()) { // direct validation
l1.hide();
l2.show();
}
}
});
}
...
}
})
有一些方法可以使其更简单,您可以使其并行化,而不是顺序化,但您仍然需要了解如何处理异步操作以及如何链接ajax请求。这些函数返回的是什么?当然,您必须传递一个名称,通过这些函数发送电子邮件或取消电子邮件。@doveyg可能正在验证页面上某个字段的内容,或者类似的内容。您应该在if语句中包含函数的代码。您的问题对我来说毫无意义。一行两次是
a()&&b()
,a()&&a()
,a();b()代码>,或a();a()代码>?尽管如此,在这些情况下,没有一个是第二次评估而没有第一次评估。哇,我从来没有想过!不过谢谢:)