我的检查表单的javascript,在提交按钮上加了一个onclick="return checkform(form1)

<script type="text/javascript">
<!--
//检查一个输入域是否为空
function isEmpty(str)
{
if((str==null)||(str.length==0))
return true;
else
return false;
}

//函数isEmail用来判断一个输入域是否为合法的电子邮件地址
function isEmail(theStr)
{
var atIndex=theStr.indexOf('@');
var dotIndex=theStr.indexOf('.',atIndex);
var flag=true;
theSub=theStr.subString(0,dotIndex+1);
//四种情况:'@'字符为首,有两个'@'字符,域名只有一个字符,以'.'结尾
if((atIndex<1)||(atIndex!=theStr.lastIndexOf('@'))||(dotIndex<atIndex+2)||(theStr.length<=theSub.length))
{
flag=false;
}
else
{
flag=true;
}
return flag;
}

//检查表单
function checkform(Frm)
{
var flag=true;
if(isEmpty(Frm.name.value))
{
alert("请输入名字");
Frm.name.focus();
flag=false;
}
else if(!isEmail(Frm.email.value))
{
alert("您的电子邮件输入有误");
Frm.email.focus();
flag=false;
}
else if(isEmpty(Frm.title.value))
{
alert("请输入主题");
Frm.title.focus();
flag=false;
}
else if(isEmpty(Frm.suggestions.value))
{
alert("请输入意见");
Frm.suggestions.focus();
flag=false;
}
return flag;
}
-->
</script>

表单:
<form name="form1" method="post" action="idea.jsp" >
<label></label>
<table width="646" border="0">
<tr>
<td>您的姓名:</td>
<td><label>
<input type="text" name="name" id="name">
</label></td>
</tr>
<tr>
<td>您的E-mail:</td>
<td><label>
<input type="text" name="email" id="email">
</label></td>
</tr>
<tr>
<td>主题:</td>
<td><label>
<input type="text" name="topic" id="topic">
</label></td>
</tr>
<tr>
<td>您的意见:</td>
<td><label>
<textarea name="suggestions" id="suggestions" cols="45" rows="5"></textarea>
</label></td>
</tr>
<tr>
<td><label>
<input type="submit" name="tijiao" id="tijiao" value="提交意见" onclick="return checkform(form1)">
<input type="reset" name="clear" id="clear" value="清除重填">
</label></td>
<td> </td>
</tr>
</table>
<p> </p>
</form>
为什么我的检查email地址是否合法的函数没有被执行到?onclick="return checkform(form1)和onclick="return checkform(this)的执行效果也不一样。前一个有错的话页面会停止跳转,后一个有错的话还会自动跳转,为啥啊?

第1个回答  2011-02-16
问题1:事件注册错误 不应该对submit的onclick注册,应该对form的onsubmit进行注册,如下
<form name="form1" method="post" action="idea.jsp" onsubmit="return checkform(this);">
问题2:checkform的错误,如下
function checkform(Frm)
{
var flag=true;
if(isEmpty(Frm.name.value))
{
alert("请输入名字");
Frm.name.focus();
//这里最好就return 效率高得很,否则还要继续判断
//如 return false;
flag=false;
}
//一定要判断Frm.email.value是否为空,否则后续错误
if(isEmpty(Frm.email.value)||isEmail(Frm.email.value))
{
alert("您的电子邮件输入有误");
Frm.email.focus();
flag=false;
}
//主题的命名错误,不是title 应为topic
if(isEmpty(Frm.topic.value))
{
alert("请输入主题");
Frm.topic.focus();
flag=false;
}
if(isEmpty(Frm.suggestions.value))
{
alert("请输入意见");
Frm.suggestions.focus();
flag=false;
}
alert(flag);
return flag;
}本回答被提问者和网友采纳
相似回答