<script language="javascript">
var validity = 1;
function isEmail(obj,td)//验证Email
{
var Email = document.getElementById('Email').value;
var pattern = /^([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
// Email 必须是 [email protected] 等格式 或者为空
if(!pattern.exec(Email))
{
document.getElementById(td).className="hui2";
document.getElementById(td).innerHTML=msgInfo[7];
validity = 2;
return false;
}
else
{
document.getElementById(td).className="hui1";
document.getElementById(td).innerHTML=msgInfo[5];
return true;
}
}function Check()
{
isEmail('obj','td');
if(validity > 1)
{
return false;
}
else
{
return true;
}
}
</script>
<form id="Form1" onsubmit="return Check();" action="Join.aspx" method="post" runat="server">
我想在Email验证失败后就不提交表单了,但是Email数据不符合要求的时候仍然会提交,可是第二次就不会提交表单了。这是怎么回事呀,请大家帮忙解决!谢谢!

解决方案 »

  1.   

    把var validity = 1;放到Check() 里试试:
    function Check()
    {
    var validity = 1;
    if(isEmail('obj','td'))
    validity = 2;
    if(validity > 1)
    {
    return false;
    }
    else
    {
    return true;
    }
    }
      

  2.   

    应该是反过来的,呵呵
    if(!isEmail('obj','td'))
      

  3.   

    var validity = 1;设置为全局的是因为我要在多个函数的验证数据是否完整。
    正策表达式和函数的调用都没有问题,问题是出在validity 是一个全局变量的问题上。我是想在多个文本进行验证后给validity 赋值,如果不为 1 就不提交。请问怎么解决。
      

  4.   

    去掉 Form .......  runat = "server">
      

  5.   

    首先,如果你确认你需要通过validity作为是否通过验证的变量,而不是通过return返回值来说明是否通过验证,那么validity必须使全局变量,也就是必须在任何一个function之外进行var validity。其次,每次进入isEmail都要为validity提供初值,虽然一旦验证成功页面就提交了这个值就没意义了,但这是良好的习惯。还有,就是按钮事件return true为继续冒泡处理,return false才是抑制冒泡让上层不作处理,看看你是否弄反了?
      

  6.   

    if(!pattern.exec(Email))如果不满足正策表达式则返回false,这里没有弄反
    {
    ...
    validity = 2
    return false;
    }
    else
    {
    ....
    return true;
    }
    var validity = 1;也是设置的全局变量;
    在第一次提交的时候总是可以,但是不刷新接着进行第二次提交就是正常的结果(不通过验证就不提交表单)