2014-10-21 90 views
0

在我提交表单之前,我想检查输入中的值。在提交表单前检查值

这里我检查一个值是否等于.5或1,或者不是空字符串。

form.onsubmit = function(e) { 
    var ftimes = document.getElementsByClassName("add_timebox"); 
    var fflag = 0; 
    for(i=0;i< ftimes.length;i++) { 
     var value1 = ftimes[i].value; 
     console.log(value1); 
     if (value1 !==.5 ||value1 !== 1 || (!IsStringEmpty(value1))){ 

      fflag = 1; 
      console.log('inside'); 
     } 

} 
if(fflag==1) { 
    alert('enter again'); 
    return false; 
} 

我对IF语句做了很多更改,试图使其正确。 但即使我知道如果不应该,它仍然在循环中。

例如,当我提交表单,我有一个输入值等于0.22 那么它应该仅仅给我1“内部”,但在不断重复:

内部 0.22 (空字符串) 内 ....

回答

1

你不告诉你是如何实现你的IsStringEmpty方法,但如果你使用的是这样的事情,那么任何数量也是一个非空字符串,那么你的if语句将始终运行。

function IsStringEmpty(str) { 
    return (!str || 0 === str.length); 
} 

所以你需要改变你的ORs,或者它永远不会检查数字条件。

您可以检查该值是不是一个空字符串,是不同于0.5和1.那么你的条件应该是这样的。

if (!IsStringEmpty(value1) && value1 !== 0.5 && value1 !== 1) 

但是,您从窗体中获取值,所以它将是一个字符串。因此,你正在比较字符串,你需要这个。

if (!IsStringEmpty(value1) && value1 !== ".5" && value1 !== "1") 

虽然你可能会想比较浮动,在这种情况下,你需要这个。

if (!IsStringEmpty(value1) && parseFloat(value1) !== .5 && parseFloat(value1) !== 1)) 

因此,基本上,当您在所有表单域中输入1,.5或空字符串时,跳过内部块。但是,如果您在任何字段中都有其他值,那么该标志将被设置为1.如果这不是您的意思,请更新您的问题以更具体。

请检查Plunker here

希望这会有所帮助。

+0

我的意思是NOT = .5和1 – jfishbow 2014-10-21 23:53:27

0

你必须添加一个休息;一旦if条件满足,在if条件中陈述。

if (value1 !==.5 ||value1 !== 1 || (!IsStringEmpty(value1))){ 

      fflag = 1; 
      console.log('inside'); 
      break; 

     } 
+0

我不认为休息会做,因为它不会显示警报 – jfishbow 2014-10-21 22:11:58

+1

它肯定会显示警报,因为休息只是打破for循环,而不是后面的条件。但是,如果您希望表单在显示警报后不提交,请添加以下语句。 if(fflag == 1){alert('enter again'); event.returnValue = false; 返回false; } – 2014-10-21 23:05:24

+0

我明白了,但是问题在于IF条件下的内容,无论价值是什么 – jfishbow 2014-10-21 23:09:05