表单在php中验证前提交
form submits before validation in php
我有一个要提交的表单,所以当我点击提交时,它会转到selectorpage.php,并在其中找到所选的函数类型,例如登录,它会进一步调用控制器来执行函数。我遇到的问题是,js中有一个名为validateForm()的函数,我一点击提交按钮,它就会转到selectorPage.php。我想停止表单提交,通过js进行验证,然后从那里提交表单,我使用了onsubmit=return false;in form标记,但它只是阻止了执行任何进一步操作的形式。我也不知道如何将表单重定向到selectorPage,如果它在js中工作的话。所以任何人都想告诉我如何从js提交表单,然后将该页面重定向到selectorPage.php。谢谢
<form method="post" action="selector.php?type=login" id="login" id="loginForm">
<div class="row">
<div class="offset1 span1">
<div class="lbel">
<label class="control-label" for "loginName">
Username/Email
</label>
</div>
<div class="lbl_inpuCnt">
<input type="text" class="input-xlarge" id="loginName"
name="loginName" maxlength="50"/>
</div>
<div id="usernameError"> </div>
<div class="lbel">
<label class="control-label" for="loginPassword">
Password
</label>
</div>
<div class="controls">
<input type="password" class="input-xlarge"
id="loginPassword" name="loginPassword"
maxlength="50"/>
</div>
<div id="passwordError"> </div><br/>
</div>
</div>
<div style="margin-left: 55px;">
<input class="btn" style="width: 80px;" type="reset"
name="reset" value="Reset"/>
<input class="btn" style="width: 80px;" type="submit"
name="submit" value="Login" onclick="validateForm();"/>
</div>
</form>
这是根据上面的代码编写的javascript
function validateForm(){
form = document.forms['loginForm'];
if(document.getElementById('loginName').value == "")
document.getElementById('usernameError').innerHTML = 'Invalid username or email';
else{
document.getElementById('usernameError').innerHTML = " ";
form.submit();
}
} //suppose it for the email validation only for the time being
您可以尝试
<form ... onsubmit="return validateForm();"
在validateForm()
函数中使用
return true / false
取决于是否发现错误。
以下是使用内联事件处理的规范方法,请进一步了解如何使其不引人注目。表单标签上只有一个id,也永远不要在表单中调用任何submit
——这是一个保留字,将阻止通过脚本提交(这就是你试图做的)
<form id="loginform" ... onsubmit="return validate(this)">
<div style="margin-left: 55px;">
<input class="btn" style="width: 80px;" type="reset" name="reset" value="Reset" onclick="clearFields()"/>
<input class="btn" style="width: 80px;" type="submit" value="Login" />
</div>
</form>
这是javascript
function validateForm(form){ // passing form object
document.getElementById('usernameError').innerHTML = ""; // reset
if (form.loginName.value == "") {
document.getElementById('usernameError').innerHTML = "Invalid username";
return false;
}
return true;// allow submission
}
替代
<form id="loginform" ..... No event handler here ...>
脚本:
window.onload=function() {
document.getElementById("loginform").onsubmit=function() {
document.getElementById('usernameError').innerHTML = ""; // reset
if (this.loginName.value == "") { // notice the "this"
document.getElementById('usernameError').innerHTML = "Invalid username";
return false;
}
return true;// allow submission
}
}
我自己过去也遇到过类似的问题。
当您单击表单的"登录"按钮时,您将触发两个单独的事件-调用"validateForm();"javascript函数,以及表单本身的提交。这里的问题是,提交表单涉及到浏览器将出站请求发送回表单目标,据我所知,一旦触发请求事件,就无法使用javascript终止请求事件。
使用"onsubmit=return false;",很可能正是在做它应该做的事情——退出当前的javascript范围(从而阻止与该特定事件相关联的其他javascript执行)。然而,不幸的是,表单本身的提交虽然可以通过javascript触发和控制,但实际上并不是由javascript处理的,也不是javascript函数本身。
根据我的经验,我发现最好的解决方案是使用"按钮"型输入,而不是"提交"型输入-"提交"answers"按钮"都显示为按钮,但"按钮"实际上没有任何默认的固有关联事件操作(因此,当你点击它时,实际上不会做任何事情)-这意味着,通过事件处理程序(如您所做的"onclick"),您可以完全控制用户单击"按钮"时会发生什么。
您尚未包含"validateForm();"javascript函数,所以我不知道它包含什么,但是,如果它还没有这样做,我会包含通过该javascript函数提交表单的代码,在验证成功后提交表单(或者在验证失败时返回某种人类可读的错误)-这与使用"按钮"而不是"提交"相结合应该可以解决您的问题。
希望这能有所帮助。:)
编辑:在我最初回复后不久就想到了这一点。一些浏览器会在通过提交输入类型提交表单之前处理诸如"onclick"之类的事件处理程序;然而,我发现某些较旧的浏览器目前并没有做到这一点(这就是我上面文章的上下文)。对于接受表单提交前处理的事件处理程序结果的较新浏览器,如果验证失败,则应该可以防止第二个事件(表单提交)发生;然而,并不是所有的浏览器都会接受这些结果,我发现有些浏览器会继续提交表单,而不管这些结果如何。
好吧,谢谢大家,所以我终于根据你们的想法找到了解决方案,这就是我所做的而不是放置return formvalidate();函数我把它放在提交onclick事件中,它像魅力一样运行。。。感谢
<div style="margin-left: 55px;">
<input class="btn" style="width: 80px;" type="reset" name="reset" value="Reset" onclick="clearFields()"/>
<input class="btn" style="width: 80px;" type="submit" name="submit" value="Login" onclick="return validateForm();"/>
</div>
这是javascript
function validateForm(){
var form = document.forms['loginForm'];
if(document.getElementById('loginName').value == "")
document.getElementById('usernameError').innerHTML = 'Invalid username or email';
else{
form.submit();
}
return false;
}
- Javascript生成的表单未提交
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- HTML表单提交时未执行外部函数
- 在POST中将html表作为csv提交
- 我应该使用Ng提交还是点击表格
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 提交后保留下拉选择的值
- 键入最后一位数字后自动提交
- 阻止表单元素提交
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- Jquery提交表单而不刷新
- 将图像上传ajax与表单提交ajax相结合
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 自定义表单验证和提交
- 带有验证和隐藏字段值的提交按钮
- 如何在 API 调用后和 if 语句中启用提交按钮
- Jquery函数在错误的时间提交
- Javascript无法处理表单提交
- 提交按钮,该按钮位于使用 Excel VBA 的 Javascript 中
- 表单不会通过ajax提交