2010-03-30 132 views
12

我完全困惑......我发誓这是昨天工作...我今天早上醒来,所有的表格都停下来工作在我的项目中。onSubmit返回false不起作用

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

为什么如果我按表单被发送的按钮?

我知道这是一个总的新手问题,但我坚持

谢谢!

回答

2

试着改变你的“按钮”的代码一样,

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

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

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

如果你想继续使用页面顶部的链接(这是不unobtrusiveprogressive,或优雅的),那么你需要显式调用sub()功能,如果你在决定之前,测试它的返回值也可以不要拨打submit()

12

浏览器如果以编程方式调用submit(),则不要在窗体上调用 onSubmit事件。

+0

Andy ...我发誓你昨天工作:) 我有一个完整的项目,这种结构,形式从未提交... 它必须是其他的东西......:P – StuckOnSubmit 2010-03-30 09:16:41

+0

提交事件不会触发此代码。三个单独的答案都说这个!要么你错了,要么你的测试用例不足以代表你的实际代码。 – Quentin 2010-03-30 10:01:46

+0

你确定你没有实际的提交按钮?那样会起作用。也许你昨天改变了你的提交按钮作为一个增强的锚点?你有源代码管理系统吗?其他开发者是否也在开发可以改变它的项目? – 2010-03-30 10:06:50

5

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

您可以使用jQuery的preventDefault方法。

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

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

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

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

另一个技巧我给的是使用name属性在所有形式,因为它是非常容易使用:的 document.form1.submit()代替document.getElementById('form1').submit()。它是跨浏览器,并在所有这些工作。 getElementById很好,但对表单不是必需的。

-3

检查基本语法和结构...然后检查您的页面上的其他表单或输入框没有形式...我有同样的问题(或类似:按输入框中的回车将导致表单发送)...

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

+0

你为了使它工作而做了哪些改变?看看[如何回答](http://stackoverflow.com/questions/how-to-answer),了解如何回答Stack Overflow的问题。 – Jesse 2013-03-05 03:01:34

-1

我有同样的问题(我用的是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())"> 

我只需按照样品here

并请注意:

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

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

0

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