我有一个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 =按钮并在函数本身中包含submit()会更好吗?
答案 0 :(得分:5)
如果JavaScript出现错误,则无法返回false,无论如何都会提交表单。
您的javascript中存在错误:getElementByID
应为getElementById
。
答案 1 :(得分:0)
使用像原型这样的javascript库和像Event.stop()这样的方法:
答案 2 :(得分:0)
确保方法实际返回false。如果在返回false语句之前有错误,例如在此行
document.getElementByID("passwordError").style.display="inline";
然后表格仍然可以提交。