我完全糊涂了...我发誓这是昨天工作的......我今天早上醒来,我的所有表格停止在我的项目中工作。
所有表单都有一个“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
为什么我按下表格发送的按钮?
我知道这是一个全新的问题,但我被困了
谢谢!
答案 0 :(得分:12)
浏览器不会调用表单上的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()
方法时,它不会触发。
最好的解决方案是在这里使用普通的提交按钮。
如果您想继续使用指向页面顶部的链接(不是unobtrusive,progressive或优雅),那么您需要调用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键会导致表单发送) ...
我复制粘贴上面的示例并加载页面。他们工作,我的没有,所以我调整了格式,甚至改写了它。