代码之家  ›  专栏  ›  技术社区  ›  EmmyS

同时使用javascript和php

  •  1
  • EmmyS  · 技术社区  · 15 年前

    我有一个PHP表单,在提交时需要一些非常简单的验证。我宁愿做验证客户机端,因为有相当多的服务器端验证恰好处理将表单值写入数据库。所以我只想调用一个javascript函数onsubmit来比较两个密码字段中的值。这就是我得到的:

    function validate(form){
      var password = form.password.value;
      var password2 = form.password2.value;
      alert("password:"+password+" password2:" + password2);
    
      if (password != password2) {
        alert("not equal");
        document.getElementByID("passwordError").style.display="inline";
        return false;
      }
      alert("equal");
      return true;
    }
    

    如果两个密码不匹配,将显示包含错误消息的默认隐藏DIV。警报只是显示密码和密码2的值,然后再次指示它们是否匹配(不会在生产代码中使用)。

    我正在使用输入类型=提交按钮,并调用表单标记中的函数:

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return validate(this);">
    

    当输入不匹配的值时,一切都将按预期发出警报。我希望(并且基于过去的使用假设)如果函数返回false,实际提交不会发生。然而,事实确实如此。我正在通过在密码字段中输入不匹配的值进行测试,警报清楚地显示了值和不相等的结果,但实际的表单操作仍在发生,它正在尝试写入我的数据库。

    我对php很陌生,有没有什么东西不允许我用这种方式与javascript结合?如果函数返回true,那么在函数本身中使用input type=button和include submit()会更好吗?

    3 回复  |  直到 15 年前
        1
  •  5
  •   edwin    15 年前

    如果在javascript中发生错误,则不会返回false,表单仍将被提交。

    您的javascript中有一个错误: getElementByID 应该是 getElementById .

        2
  •  0
  •   Sean Patrick Floyd    15 年前

    使用类似原型的javascript库和类似event.stop()的方法:

    http://www.prototypejs.org/api/event/stop

        3
  •  0
  •   Jacob    15 年前

    确保该方法实际返回false。如果在返回错误语句之前有错误,例如在此行

     document.getElementByID("passwordError").style.display="inline";
    

    那么表格仍然可以提交。