Javascript 如何在执行后处理之前检查所有条件

Javascript 如何在执行后处理之前检查所有条件,javascript,jquery,Javascript,Jquery,我正在开发一个实时验证功能。问题是函数中的条件的后遗症在满足最后一部分之前执行。在满足条件之前,输入验证指示器不应变为绿色,但情况并非如此 满足第三个条件后,指示灯变为绿色。在所有条件都满足之前,不应该这样做。关于我如何解决这个问题的任何建议 我的代码如下所示 $(函数(){ //预定义扩展 var xTension=“.com.net.edu”; $(“输入”).keyup(函数(){ //检查“@”符号的位置 var firstLetter=$(this.val().slice(0,1);

我正在开发一个实时验证功能。问题是函数中的条件的后遗症在满足最后一部分之前执行。在满足条件之前,输入验证指示器不应变为绿色,但情况并非如此

满足第三个条件后,指示灯变为绿色。在所有条件都满足之前,不应该这样做。关于我如何解决这个问题的任何建议

我的代码如下所示

$(函数(){
//预定义扩展
var xTension=“.com.net.edu”;
$(“输入”).keyup(函数(){
//检查“@”符号的位置
var firstLetter=$(this.val().slice(0,1);
var lastLetter=$(this.val().slice(-1);
var userXs=“否”;
//用户提供的扩展
var userX=$(this.val();
userX=userX.substr(userX.indexOf(“.”+0);
if(xTension.indexOf(userX)>-1){
如果(userX!=“”){
userXs=“是”;
}否则{
userXs=“否”;
}
}否则{
userXs=“否”;
};
if($(this.val().indexOf(“@”)>-1&&(firstLetter!=“@”)&&(lastLetter!=“@”)&&&(userXs!=“No”)){
$(“#输入状态”).removeClass(“红色”).addClass(“绿色”);
}否则{
$(“#输入状态”).removeClass(“绿色”).addClass(“红色”);
}
});
});
.rack{
宽度:250px;
保证金:0自动;
}
#输入状态{
宽度:1px;
高度:3倍;
与:0;
显示:内联块;
过渡:所有2;
}
输入{
宽度:230px;
高度:30px;
文本对齐:居中;
}
#输入状态。绿色,
#输入状态。红色{
宽度:235px;
背景:暗绿色;
过渡:所有2;
}
#输入状态。红色{
背景:红色;
}

实时验证

使
xTension
成为数组,而不是字符串。如果用户键入
user@foo.c
userX
将是
.c
,这将由
indexOf()
与字符串匹配,因为没有任何东西强迫它匹配整个单词。执行此操作时,不再需要检查
userX
是否为空字符串

我对代码做了一些其他简化:

  • 不要获取第一个和最后一个字符,只需根据适当的限制测试
    @
    的位置即可
  • indexOf()之后不需要
    +0
  • 不要一直调用
    $(this).val()
    ,将其放入变量中
  • 用户为
    userXs
    指定一个布尔变量
  • $(函数(){
    //预定义扩展
    var xTension=[“.com”、“.net”、“.edu”];
    $(“输入”).keyup(函数(){
    var val=$(this.val();
    //用户提供的扩展
    userX=val.substr(val.indexOf(“.”);
    userXs=xTension.indexOf(userX)>-1;
    atPos=val.indexOf(“@”);
    if(atPos>0&&atPos
    
    .rack{
    宽度:250px;
    保证金:0自动;
    }
    #输入状态{
    宽度:1px;
    高度:3倍;
    与:0;
    显示:内联块;
    过渡:所有2;
    }
    输入{
    宽度:230px;
    高度:30px;
    文本对齐:居中;
    }
    #输入状态。绿色,
    #输入状态。红色{
    宽度:235px;
    背景:暗绿色;
    过渡:所有2;
    }
    #输入状态。红色{
    背景:红色;
    }
    
    实时验证
    
    使
    xTension
    成为数组,而不是字符串。如果用户键入
    user@foo.c
    userX
    将是
    .c
    ,这将由
    indexOf()
    与字符串匹配,因为没有任何东西强迫它匹配整个单词。执行此操作时,不再需要检查
    userX
    是否为空字符串

    我对代码做了一些其他简化:

  • 不要获取第一个和最后一个字符,只需根据适当的限制测试
    @
    的位置即可
  • indexOf()之后不需要
    +0
  • 不要一直调用
    $(this).val()
    ,将其放入变量中
  • 用户为
    userXs
    指定一个布尔变量
  • $(函数(){
    //预定义扩展
    var xTension=[“.com”、“.net”、“.edu”];
    $(“输入”).keyup(函数(){
    var val=$(this.val();
    //用户提供的扩展
    userX=val.substr(val.indexOf(“.”);
    userXs=xTension.indexOf(userX)>-1;
    atPos=val.indexOf(“@”);
    if(atPos>0&&atPos
    
    .rack{
    宽度:250px;
    保证金:0自动;
    }
    #输入状态{
    宽度:1px;
    高度:3倍;
    与:0;
    显示:内联块;
    过渡:所有2;
    }
    输入{
    宽度:230px;
    高度:30px;
    文本对齐:居中;
    }
    #输入状态。绿色,
    #输入状态。红色{
    宽度:235px;
    背景:暗绿色;
    过渡:所有2;
    }
    #输入状态。红色{
    背景:红色;
    }
    
    实时验证
    
    什么参数?代码段中所有函数定义中的参数列表为空..?一般注释:使用布尔值表示真/假,而不是字符串。在
    indexOf()
    之后不需要
    +0
    。对于
    xTension
    @Barmar,请使用数组而不是字符串-非常感谢,我会遵守这个建议!什么论据?代码段中所有函数定义中的参数列表为空..?一般注释:使用布尔值表示真/假,而不是字符串。在
    indexOf()
    之后不需要
    +0
    。对于
    xTension
    @Barmar,请使用数组而不是字符串-非常感谢,我会遵守这个建议!