我在这个问题上阅读了几篇SO帖子,而我在可能的解释中找到的帖子是this一个。 该帖子中的回复称“如果以编程方式调用submit(),浏览器不会在表单上调用onSubmit事件。”
我不确定这是否会影响我的表格。
我的代码onsubmit =“return onNewUserRegistrationCheck(this);”是100%工作 - 对onNewUserRegistrationCheck(this)的调用是100%发生的。
这是代码:
function onNewUserRegistrationCheck(theForm)
{
alert("In onNewUserRegistrationCheck()");
if(theForm.loginname.value == "<?php echo Labels::$DEFAULTLOGINEMAILLABEL ?>"
|| theForm.password.value == "<?php echo Labels::$DEFAULTPASSWORDLABEL ?>" )
{
alert("returning false now, so -- HOPEFULLY the form doesn't submit");
return false;
}
}
以下是表格:
<form enctype="multipart/form-data" onsubmit="return onNewUserRegistrationCheck(this);"
class="registerFormStyles" name="registerForm" id="regform"
action="regTheNewUser.php" method="post">
<input type="text" id="loginname" name="<?php echo Labels::$USERNAMELABEL ?>"
style="width:260px" value="<?php echo Labels::$DEFAULTLOGINEMAILLABEL ?>" />
<input type="password" placeholder="<?php echo Labels::$DEFAULTPASSWORDLABEL ?>"
id="password" name="<?php echo Labels::$PASSWORD ?>"
style="width:220px" class="inactive" />
<input type="hidden" name="newUserRegister" id="newUserRegisterId">
<input type="image" name="registerButton" value="Register" class="login-button-landing"
onclick="document.registerForm.submit();">
</form>
注意我使用type =“image”并执行程序化提交()。根据一些SO帖子,结果 我正在做的程序化提交()是这样的:'如果以编程方式调用submit(),浏览器不会在表单上调用onSubmit事件
但是,当我点击我的名字=“registerButton”伪提交按钮时,我看到2个警告框:
alert box #1 pops up and says: "In onNewUserRegistrationCheck()"
然后...
alert box #2 pops up and says: "returning false now, so -- HOPEFULLY the form doesn't submit"
当我单击表单上的name =“registerButton”按钮时,会出现这两个警告框。 因此,我必须(?)误解我所读过的帖子中的含义 'calling submit()不会触发onsubmit事件'。
底线是表单仍然提交到文件“regTheNewUser.php” 即使您可以看到由于警报消息而发生'return false' 被看到“现在返回false,所以 - 希望表格不提交”
如何使用type =“submit”按钮停止提交的表单 ? 我已向自己证明我的 onsubmit =“return onNewUserRegistrationCheck(this);” 是100%被召唤。我返回false,但无论如何都会提交表单。
当找到无效的表单文本条目时,如何停止提交的表单 为什么不在STOP表格提交上面“返回错误”?
答案 0 :(得分:2)
删除
的onclick = “document.registerForm.submit();”
!!!
type = image是一个提交和 document.registerForm.submit()不会触发onsubmit事件处理程序!
所以点击首先触发提交,然后事件处理程序启动,因为它是一个提交按钮,然后表单从第一个子文件发送到服务器
答案 1 :(得分:1)
在你的帖子中你使用了
输入类型=“图像” - 其行为与输入类型相同=“提交”,因此在单击图像时会触发onsubmit事件。您已从onsubmit事件处理函数返回false,并且onsubmit处理程序已在表单中注册,因此返回值将发送到表单并停止表单的提交操作。
但您说您的表单已提交,因为
在图片中,您已经注册了以编程方式调用submit()方法的onclick事件,因此您的表单已提交。
为了阻止您的表单在返回false时被提交,只需从图像中删除onclick事件处理程序并将其替换为以下代码
<input type="image" name="registerButton" value="Register" class="login-button-landing" >
希望这能解决您的问题