0

我正在制作带有 javascript 验证的注册表单。

<form name="registration" method="post" onsubmit="return validate_registration()">
<input id="username" type="text" name="username" value="<?php echo @$_POST['username'];?>" onblur="checkUsername(this.value)">
<span id="e_username" style="display: none; color: #c00;"><?php echo _("Some error");?></span>
<input type="submit" name="register_frm_smbt" value="<?php echo _("Submit");?>">
</form>

Javascript:

<script type="text/javascript">
  function checkUsername(login){
    reg = /^[\w]{1}+[\w\.\d-_]{1,}$/i;
    if (login.length < 3 || !login.match(reg)) {
        document.getElementById("e_username").style.display = "inline";
        return false;
    }
    else {
        document.getElementById("e_username").style.display = "none";
        return true;
    }
  }

function validate_registration(){
      var username = document.getElementById("username").value;
      alert(username); // works
      if (checkUsername(username) ){
              alert("OK!"); //never
              return true;
              }
      else {
          alert("NOT OK!"); //never
          return false;
      }
  }
</script>

所以checkUsername(login)在填写表格时可以正常工作“onblur”。但validate_registration()没有。我收到带有用户名的第一个警报,但都没有“OK!” 或“不行!” 正在警告。这是为什么?

4

1 回答 1

0

使用 onsubmit,您不会取消事件,因此表单会被提交并重新加载页面。

为了防止表单被发送到服务器,捕获传递给回调的事件,然后阻止默认操作,如下所示:event.preventDefault()

于 2013-10-22T18:36:28.173 回答