代问如下:
<Script language="JavaScript">
<!--
function examine()
{
if(!theme()){return false;}
if(!cameraman()){return false;}
return ture;
}
function isbank(s)
{
var len=s.length;
var i;
for(i=0;i<len;i++)
{
if(s.chatAt(i)!=" ") return false;
}
return true;
}
function theme()
{
if(isbank(document.add.theme.value))
{
alert("主题的值里不能为空!");
document.add.theme.focus();
return false;
}
return ture;
}
function cameraman()
{
if(isbank(document.add.cameraman.value))
{
alert("摄影者的值不能为空!");
document.add.cameraman.focus();
return false;
}
return ture;
}
//--></Script>
<form action="AddNote" name="add" method="post" onSubmit="return examine()">
<input type="text" name="theme" size="15" onchange="theme()">
<input type="text" name="cameraman" onchange="cameraman()" size="15">
<input type="submit" name="save" value="保存" >
</form>问题是:每次按保存,如果文本theme为空值则在JavaScript的examine()函数中成功运行if(!theme()){return false;}语句,如果文本theme的值不为空,不管文本cameraman的值是否为空就直接跳转页面,不会去检查examine()函数中if(!cameraman()){return false;}语句
还有是不管examine()函数中最后一条是返回true,还是返回false,按保存后,如果如果文本theme的值不为空,照样跳转
<Script language="JavaScript">
<!--
function examine()
{
if(!theme()){return false;}
if(!cameraman()){return false;}
return ture;
}
function isbank(s)
{
var len=s.length;
var i;
for(i=0;i<len;i++)
{
if(s.chatAt(i)!=" ") return false;
}
return true;
}
function theme()
{
if(isbank(document.add.theme.value))
{
alert("主题的值里不能为空!");
document.add.theme.focus();
return false;
}
return ture;
}
function cameraman()
{
if(isbank(document.add.cameraman.value))
{
alert("摄影者的值不能为空!");
document.add.cameraman.focus();
return false;
}
return ture;
}
//--></Script>
<form action="AddNote" name="add" method="post" onSubmit="return examine()">
<input type="text" name="theme" size="15" onchange="theme()">
<input type="text" name="cameraman" onchange="cameraman()" size="15">
<input type="submit" name="save" value="保存" >
</form>问题是:每次按保存,如果文本theme为空值则在JavaScript的examine()函数中成功运行if(!theme()){return false;}语句,如果文本theme的值不为空,不管文本cameraman的值是否为空就直接跳转页面,不会去检查examine()函数中if(!cameraman()){return false;}语句
还有是不管examine()函数中最后一条是返回true,还是返回false,按保存后,如果如果文本theme的值不为空,照样跳转
1,拼写错误, true误写成了 ture,charAt 写成了chatAt
2,命名冲突,function theme() 和 <innput name="theme " onchange="theme()">还有另一对cameraman
因为命名冲突导致实际 onchange并不能如期执行。
3,JS代码有些地方不够精简。比如,
function examine()
{
if(!theme()){return false;}
if(!cameraman()){return false;}
return ture;
}
显然可以更精简一些写成如下形式
function examine()
{
return (theme() && cameraman())
}
另一处
function isbank(s)
{
var len=s.length;
var i;
for(i=0;i<len;i++)
{
if(s.chatAt(i)!=" ") return false;
}
return true;
}
可以写成
function isbank(s)
{
return (s.search(/\S/)==-1);
}
4,从验证整体上来考虑,更简洁的写(做)法。比如两个都是非空验证,显然用一个函数就可以实现。更多你慢慢体会吧