8

我有一个表单,它将通过标记的“onsubmit”触发的javascript代码提交。适用于所有浏览器 - 但不适用于IE7/IE8。onsubmit =“return false”对Internet Explorer 7/8没有任何影响(表单仍然提交)

我该怎么办?

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false"> 
    [...] 
    <input type="submit" value="Go"> 
</form> 
+0

没有简单的理由'返回false;'不按原样工作。我们需要看你的代码,以更好地了解发生了什么。 **编辑**我们需要查看'submitmyform()'的代码,因为它可能会发生错误以防止执行'return false;'。 – 2010-11-02 13:44:25

+0

@Andy E:我添加了示例代码 – 2010-11-02 13:47:08

回答

0

我们的解决方案是将javascript事件从表单的“onsubmit”移动到“onclick”提交按钮。

<form action="/dosomething.htm" method="GET"> 
    [...] 
    <input type="submit" value="Go" onclick="submitmyform();return false"> 
</form> 
+4

这只会阻止通过单击或按下提交按钮上的回车键发生的表单提交。在表单内的输入控件中按下Enter键可以解决这个问题。 – 2010-11-02 13:47:42

+1

我也认为情况会如此。但是......这不是我在这里看到的。 – 2010-11-02 14:06:13

+0

@AndyE它实际上确实阻止了即使点击进入...检查出来 – 2013-02-04 18:05:13

-2

我觉得现在的问题是虚假的回报,你需要从你的“的onsubmit”功能返回它

看到的例子。

此表单永远不会在IE 7/8中提交。

<form action="acknowledgement.html" method="get" onsubmit="verify();"> 
     <input type="submit" name="submit" 
     VALUE="Submit"> 
     </form> 

<script language="javscript"> 
function verify(){ 

return false; 
} 
</script> 

Danny。

+2

这是行不通的。 'verify()'函数将控制权返回给'onsubmit'函数,所以它是'onsubmit'函数,需要返回false来取消默认操作。 – 2010-11-02 14:01:48

-2

它的工作原理 - 检查W3Scools例子(摘自) http://www.w3schools.com/js/js_form_validation.asp

<html> 
<head> 
<script type="text/javascript"> 
function validate_required(field,alerttxt) 
{ 
with (field) 
    { 
    if (value==null||value=="") 
    { 
    alert(alerttxt);return false; 
    } 
    else 
    { 
    return true; 
    } 
    } 
} 

function validate_form(thisform) 
{ 
with (thisform) 
    { 
    if (validate_required(email,"Email must be filled out!")==false) 
    {email.focus();return false;} 
    } 
} 
</script> 
</head> 

<body> 
<form action="submit.htm" onsubmit="return validate_form(this)" method="post"> 
Email: <input type="text" name="email" size="30"> 
<input type="submit" value="Submit"> 
</form> 
</body> 

</html> 
11

我要鸡蛋里挑骨头这一点。如果你想处理表单提交,这是提交的目的。如果用户点击进入您的某个字段,则您的onclick处理程序将完全避免。这是一个非突兀的做法的基本例子。

<form name="myform"> 
    <input type="submit" /> 
</form> 
<script> 
    document.myform.onsubmit = function(){ 
    alert('handled'); 
    return false; 
    } 
</script> 

这可以做了很多简单的jQuery,同样的形式...

$("form[name=myform]").bind('submit',function(){ 
    alert('handled'); 
    return false; 
}); 
+2

这也不是非强迫性的,如果你有一种机制,你可以在不知道任何具体实现细节的情况下自动将一个事件绑定到一个函数,那么你就是。即具有'document.myform'或'form [name = myform]'*就像在HTML中具有onsubmit属性一样突兀,除了相反的方向。你需要的是一种发现表单的方法,发现它的验证函数(可能通过命名约定'validateMyForm()'),并因此自动和一般地绑定。如果你真的想成为非突兀的。它也可以重用。 – 2012-07-18 10:51:01

+0

如果你在页面上有2个表单,并且每个表单都需要不同的提交逻辑,你必须有一些方法来表示哪个表单获得了哪个函数。我认为这基本上是通过name属性在这个答案中完成的。你也可以使用data- *属性。我认为对于这种情况,“不显眼的JavaScript”是指不在标记中使用js内联,而不是严格分离标记和JavaScript。 – jinglesthula 2014-05-02 17:45:57

2
<script type="text/javascript"> 
<!-- 

function submitHandler() 
{ 
    alert(0); 
    return false; 
} 

window.onload=function(){document.getElementById("formid").attachEvent("onsubmit", submitHandler);} 
--> 
</script> 

<form action="/dosomething.htm" method="GET" id="formid"> 
    [...] 
    <input type="submit" value="Go"> 
</form> 

attach事件方法只仅适用于IE7/8。如果你想要一个可靠的跨浏览器解决方案,你应该使用addEventListener作为替代。

希望它可以帮助

-2

如果你想IE是符合标准的,你必须告诉它的标准,它应该在声明遵守。

没有人会得到它无尽的挫折,让它做你想做的。有了它,大多数的挫折就消失了,因为它开始像其他浏览器一样工作。

+0

这是哪一个? – BritishDeveloper 2012-04-16 13:44:24

3

我不认为你的回报错误是永远达不到的,因为它是在你的函数返回的东西之后出现的。

<form action="/dosomething.htm" method="GET" onsubmit="submitmyform();return false"> 

请确保您返回false里面的“submitmyform()”的功能一样,如果它不是那么它可以返回true你形成obsubmit事件。

-1

事实上,因为您编写submitmyform();return false只有submitmyform被评估。

在两个命令的情况下,你将不得不把这样

{submitmyform();return false;} 

这样既评估括号之间他们。

+0

有人赞成这个!? – 2013-02-04 19:27:50

0

我有同样的错误,当我打开控制台,它从来没有来过。所以我想通了,这是控制台,只要它关闭,就不会被Internet Explorer知道。一个简单的虚拟控制台添加到窗口下面的代码(如果心不是已经一个):

var myconsole = {log : function(param){}} 
window.console = window.console || myconsole; 

有了这个,你可能会遇到麻烦,如果你想拥有微软的JavaScript控制台。然后只是评论线。但是现在,整个站点上的控制台对象不再被定义。

0
<form action="/dosomething.htm" method="GET" onsubmit="return submitmyform(this)"> 
    [...] 
    <input type="submit" value="Go"> 
    </form> 

这工作得很好...该函数必须返回true或false

1

要在传统IE取消的事件,您需要设置returnValuefalse。简单地返回false不会这样做。我不知道为什么微软以这种方式实施它。

function validateForm(evt) { 
// if form is not valid 
    if(!condition) { 
    // if evt has preventDefault 
     if(evt.preventDefault) 
      { event.preventDefault(); } 
    // if evt has returnValue 
     else if(evt.returnValue) 
      { evt.returnValue = false; } 
    // fallback 
     else 
      { return false; } 
    } 
} 

// assume form is reference to your form 
form.attachEvent('onsubmit',validateForm); 
2

试试这个。 适合我。

的onsubmit = “JavaScript的:返回false” 这里提出的工作(因为它们使用不同的方式来编写正确的代码)

-2
document.forms.userFormRegisterr.onsubmit = function(e){ 
    return false; 
}; 
6

一些想法,但有一个很容易回答

OP写道:

onsubmit="submitmyform();" 

代替:

onsubmit="return submitmyform();" 

就是这样。

相关问题