代问如下:
<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.   

    你这个页面至少存在以下问题:
    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,从验证整体上来考虑,更简洁的写(做)法。比如两个都是非空验证,显然用一个函数就可以实现。更多你慢慢体会吧