我有一个非常奇怪的问题。在内部表单中,我隐藏了输入值-1和用户名的输入字段。
<form action="" method="POST" name="login" onSubmit="return Validate()">
<input type="text" id="username"/>
<input type="hidden" id="available" value="-1"/>
< input type="submit" value="Send"/>
</form>
On submit function Validate()检查username
输入的值,该值不能为空,Validate()也检查available
输入的值,该值不能为-1。
function Validate(){
var a=document.getElementById("username").value;
var b=document.getElementById("available").value;
if(a=="" || a==null)
{
alert("Username cannot be empty");
return false;
}
else if(b<0)
{
alert("Form isn't finished");
return false;
}
else
{
return true;
}
}
问题是Validate()仅在evalueted有一个条件时才有效。如果函数Validate()只包含1个var(a或b),那么如果顺序只包含1个(如果没有,则)它可以正常工作。但是,当我这样说时,当Validate使用a和b变量时,如果是条件顺序则不起作用。真的..提前谢谢......
在这种情况下,它有效:
function Validate(){
var a=document.getElementById("username").value;
if(a=="" || a==null)
{
alert("Username cannot be empty");
return false;
}
else
{
return true;
}
}
答案 0 :(得分:0)
<input type="hidden" id="available" value="-1"/>
这里的值是字符串dataType。而
else if(b<0) //b is string dataType
因此失败了。所以改成它
var b= Number(document.getElementById("available").value);
试试这样 的 HTML:强>
<form action="" method="POST" name="login">
<input type="text" id="username" />
<input type="hidden" id="available" value="1" />
<input type="button" value="Send" onClick="return Validate()" />
</form>
<强> JS:强>
function Validate() {
var a = document.getElementById("username").value;
var b = Number(document.getElementById("available").value);
if (a == "" || a == null) {
alert("Username cannot be empty");
return false;
} else if (b < 0) {
alert("Form isn't finished");
return false;
} else {
document.login.submit(); //dynamically submit the form
}
}
答案 1 :(得分:0)
如果您想要获取每个输入的错误通知,请不要在此处使用if / else,请使用多个if并设置错误
function validate(){
var a=document.getElementById("username").value;
var b=document.getElementById("available").value;
var errors = [];
if(a=="" || a==null){
errors.push("Invalid username");
}
if(b<0 || isNaN(b)){
errors.push("Invalid available value");
}
if(errors.length>0) {
//do something with errors (like display them
return false;
}
}
使用else,如果其中一个评估为true,它将跳过其他。例如,如果第一个为空或为null,那么它将执行该块并跳过其他块。
答案 2 :(得分:0)
我正在测试你的IE和Firefox的代码,它的工作原理。只要在获得var b的值时添加parseInt。
var b= parseInt(document.getElementById("available").value);