我现在正在编写一个关于表单验证的教程,我想帮助解释为什么这个函数总是返回if
条件。
<html>
<head>
</head>
<body>
<form id="form" action="#" method="post">
<fieldset>
<p>
First Name:
<input type="text" id="txt" />
</p>
<p> <input type="submit" value="submit" onclick="validate()" /> </p>
</fieldset>
</form>
<script type="text/javascript">
function validate()
{
var userName = document.getElementById("txt").value;
if (userName.length == 0)
{
alert("FINISH THAT UP");
return false;
}
else
{
alert("thanks, " + UserName);
}
}
</script>
</body>
答案 0 :(得分:4)
当文本框不为空时,它会到达else
部分,但随后会因错误而崩溃,因此表单会以静默方式提交。
JavaScript区分大小写 - UserName
与userName
不同,因此未定义。
更改为:
alert("thanks, " + userName);
为避免此类问题,您可以使用try..catch
这样包装整个块:
function validate()
{
try
{
var userName = document.getElementById("txt").value;
if (userName.length == 0)
{
alert("FINISH THAT UP");
return false;
}
else
{
alert("thanks, " + UserName);
}
} catch (err) {
alert("general error while validating: " + err.message);
return false;
}
}
有了这个,你会看到“UserName未定义”。
此外,在旁注 - 使用您当前的代码,即使是空值,表单仍然会被提交,尽管您返回false - 这是因为您需要取消提交甚至:
<input type="submit" value="submit" onclick="return validate()" />
您忘记了return
本身的onclick
关键字。
答案 1 :(得分:3)
JavaScript是区分大小写的语言。因此,在else语句中更正userName
变量名称,如下所示。
else {
alert("thanks, " + userName);
}
答案 2 :(得分:0)
你能试试吗?我认为这可行。
function validate()
{
try
{
var userName = document.getElementById("txt").value;
if (userName)
{
alert("FINISH THAT UP");
return false;
}
else
{
alert("thanks, " + UserName);
}
} catch (err) {
alert("general error while validating: " + err.description);
}
}
答案 3 :(得分:0)
这个怎么样
function validate(){
$("#form").submit(function() {
if($("#txt").val()==""){
alert("FINISH THAT UP");
return false;
}
if($("#txt").val()!=""){
var un = $("#txt").val();
alert("thanks, " + un);
return true;
}
});
}