onSubmit返回false不起作用

时间:2010-03-30 09:04:11

标签: return onsubmit

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

所有表单都有一个“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

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

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

谢谢!

10 个答案:

答案 0 :(得分:12)

如果您以编程方式调用submit(),

浏览器不会调用表单上的onSubmit事件。

答案 1 :(得分:7)

似乎'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>

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:4)

您可以使用jquery preventDefault方法。

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

            if (!isValid) {
                e.preventDefault();
            }
        });
    });

答案 4 :(得分:2)

尝试改变你那样的“按钮”代码

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 

答案 5 :(得分:0)

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

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

我给出的另一个提示是在所有表单中使用name属性,因为它更容易使用: document.form1.submit()代替document.getElementById('form1').submit()。它是crossbrowser并且在所有这些中都有效。 getElementById很棒但不是表格所必需的。

答案 6 :(得分: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()">

以下代码是WORKING,

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

我只关注示例here

请注意:

  

submit方法不会调用onsubmit事件处理程序。

     

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

答案 7 :(得分:0)

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

答案 8 :(得分: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>

答案 9 :(得分:-3)

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

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