13

我完全糊涂了……我发誓这是昨天工作的……我今天早上醒来,我所有的表格都停止了在我的项目中工作。

所有表单都有一个“onsubmit”到一个返回 false 的函数,因为它是一个 ajax 调用,所以表单永远不会发送。

经过大量测试,我将问题简化为这段代码:

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" id = "form1" onsubmit = "return sub()">
 input: <input type="text" name="input1" >
    <a href="#" onClick="document.getElementById('form1').submit();">button</a> 
</form>

</body>
</html>

我发誓这完美无缺,但今天也不行:D

为什么如果我按下按钮发送表格?

我知道这是一个完全新手的问题,但我被困住了

谢谢 !

4

10 回答 10

14

如果您以编程方式调用 submit(),浏览器不会在表单上调用 onSubmit 事件。

于 2010-03-30T09:12:26.657 回答
8

似乎 'submit()' 函数绕过了 Firefox 和 IE8 中的 'form' 标签 'onsubmit' 事件。如果您使用提交按钮,那么它会按预期工作:

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" action="http://google.com" id = "form1" onsubmit = "return sub();">
 input: <input type="text" name="input1" >
     <input type="submit">
</form>

</body>
</html>
于 2010-03-30T09:22:23.757 回答
5

onsubmit 事件仅在正常的表单提交时触发。submit()调用 JavaScript 方法时它不会触发。

最好的解决方案是在这里使用普通的提交按钮。

如果您想继续使用指向页面顶部的链接(不是不显眼的、渐进的或优雅的),那么您需要sub()显式调用该函数并测试其返回值,然后再决定是否应该调用submit()

于 2010-03-30T09:09:27.130 回答
4

您可以使用 jquery preventDefault 方法。

$(function () {
        $('#repForm').bind('submit', function (e) {
            var isValid = true;
            if (btnname == 'test') {
                isValid = ValidateEmailID();
            }
            else {
                isValid = ValidateSomething();
            }

            if (!isValid) {
                e.preventDefault();
            }
        });
    });
于 2012-02-17T11:18:36.713 回答
2

尝试像这样更改您的“按钮”代码

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 
于 2010-03-30T09:08:27.757 回答
0

我有同样的问题(我使用的是 IE 8),

以下代码不起作用:

<form method="post" id="form1" onsubmit="sub">
<form method="post" id="form1" onsubmit="sub()">
<form method="post" id="form1" onsubmit="return sub()">

以下代码正在运行,

<form method="post" id="form1" onsubmit="return(sub())">

我只是按照这里的示例

请注意:

提交方法不调用 onsubmit 事件处理程序。

使用 INPUT TYPE=submit、INPUT TYPE=image 或 BUTTON TYPE=submit 对象提交表单。

于 2014-09-26T02:36:25.927 回答
0

我怀疑他想使用不是提交类型的表单按钮。在这种情况下,您还可以使用:

 <input type="button" value="Submit" onclick="if( sub()) document.getElementById('form1').submit()">

我给出的另一个提示是name在所有形式中使用属性,因为它更容易使用: document.form1.submit()而不是 document.getElementById('form1').submit(). 它是跨浏览器并且适用于所有这些。getElementById 很棒,但对于表单不是必需的。

于 2013-01-22T23:06:01.123 回答
0
<head>
  <script type="text/javascript">
   function sub(e)
   {
     e.preventDefault();
     alert ("MIC!");
     return false;
   }
  </script> 
 </head>
 <body>
   <form method = "post" id = "form1" onsubmit = "return sub(event);">
   </form>
于 2018-10-27T01:19:25.607 回答
0

在表单标记中的所有 onsubmit 语句中添加“return”...例如 onsubmit="return validate_function()" 这样,验证函数中的 return false 或 return true 作为结果发布到 onsubmit 中的 return 命令。

于 2015-08-22T14:17:17.837 回答
-4

检查基本语法和结构...然后检查页面上的其他表单或没有表单的输入框...我遇到了同样的问题(或类似问题:在输入框中按 Enter 会导致表单发送)...

我复制粘贴了上面的示例并加载了页面。他们工作了,而我的没有,所以我调整了格式,甚至重写了它。

于 2013-03-05T02:43:13.603 回答