请帮帮我。验证无效
答案 0 :(得分:3)
该代码存在许多问题:
你真的不应该使用相同的<script>
元素来调用src="javascript.js"
并同时声明一个函数。使用单独的元素,如下所示:
<script type="text/javascript" src="javascript.js"></script>
<script type="text/javascript">
function validation()
{
...
}
</script>
在<form>
元素中,有一个冗余的;return false
。表单将从return validation(this)
获取值,之后的任何内容都将被忽略。而且,不需要“;”使用内联javascript时。
您正在将this
作为参数传递给validation()
函数,但验证期望没有参数。应该是:
function validation(oForm)
如果您已经通过this
,为什么不使用它? this
是对元素本身的引用,因此对于验证函数,它是对表单的引用。所以不需要命名表格。
<form action="validation.php" method="post" onsubmit="return validation(this)">
功能中的引用将是:
function validation(oForm)
{
var fname=oForm["fname"].value;
var lname=oForm["lname"].value;
}
仅这些变化可以解决您的问题。我会进一步检查代码,看看是否还有别的东西。
修改强>
我现在已经测试了验证,它确实有效。唯一必需的修改是从scr=validation.js
标记中删除<SCRIPT>
。正如我所建议的,使用单独的标签。
但我强烈建议你考虑我提到的其他问题。
此外,关于验证本身的其他建议:
对于字母数字字段,无需检查null
,只有“”就足够了。你可以简单地使用:
if (lname=="")
First Name和Last Name错误消息是相同的。这会让用户感到困惑。
避免将电话号码视为数字。请记住“(407)234-5678”是一个完全有效的电话号码,虽然它将无法通过您的测试。除非您有充分的理由将其视为数字(自动拨号?),否则请将其保留为普通的文本字段。
在国家ID字段中:HTML中没有minlength
。仅maxlength
isNaN(idnumber)
将返回true
。并且如果长度<8。我假设它是一个必需的字段,具有所需的长度,所以你应该使用:
if (isNaN(idnumber) || idnumber.length != 8)
{
alert("Please enter a valid id number");
return false;
}
对于所有测试,请考虑修剪值。目前,像“”(仅限空白)这样的输入将通过您的测试。 Javascript没有内置修剪功能,但可以通过以下方式完成:
function trim(texto){
return texto.replace(/^\s*|\s*$/g, "");
}
并像这样使用:
var fname=trim(oForm["fname"].value);
return true;
中使用明确的validation()
。以下是所有更改后的建议代码:
<script type="text/javascript" scr="validation.js"></script>
<script type="text/javascript">
function validation(oForm)
{
var fname = trim(oForm["fname"].value);
var lname = trim(oForm["lname"].value);
var idnumber = trim(oForm["idnumber"].value);
var email = trim(oForm["email"].value);
var atpos = email.indexOf("@");
var dotpos = email.lastIndexOf(".");
var address = trim(oForm["address"].value);
var phonenumber = trim(oForm["phonenumber"].value);
if (fname=="")
{
alert("First name should be entered");
return false;
}
if (lname=="")
{
alert("Last name should be entered");
return false;
}
if (isNaN(idnumber) || idnumber.length != 8)
{
alert("Please enter a valid id number");
return false;
}
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
{
alert("Please enter a valid e-mail address");
return false;
}
if(address=="")
{
alert("Please insert your address");
return false;
}
if (isNaN(phonenumber))
{
alert("Please enter a valid phone number");
return false;
}
return true;
}
function trim( texto ) {
return texto.replace(/^\s*|\s*$/g, "");
}
</script>
<form name="form1" action="validation.php" method="post" onsubmit="return validation(this)">
Firstname:<input type="text" name="fname"><br/>
Lastname:<input type="text" name="lname"><br/>
Nation ID Number:<input type="text" name="idnumber" maxlength="8"><br/>
Email address: <input type="text" name="email"><br/>
Address:<input type="text" name="address"><br/>
Pnone number:<input type="text" name="phonenumber"><br/>
<input type="reset" name="reset" value="reset">
<input type="submit" name="submit" value="submit">
</form>