document.forms [0] .submit()有什么问题?

时间:2014-08-18 21:45:49

标签: javascript forms submit

我正在帮助有网页的人遇到问题,我整理了验证部分,但提交过程的行为并不像您期望的那样。

为了捕获并停止默认事件,我在函数头部使用了以下内容

var evt = event ? event:window.event;
if (evt.preventDefault) evt.preventDefault();
evt.returnValue = false;
evt.cancelBubble = true;

如果我更改了它的任何部分,则防止默认操作不起作用,即使验证错误存在或持续存在,MSIE中的页面也会提交。在Chrome下,浏览器不提交但是抛出错误,使用MSIE下的预防例程,调试在同一行显示错误。

Chrome:未捕获TypeError:对象不是函数

MSIE:Object不支持此属性或方法

有问题的一行:

document.forms[0].submit();

尝试

document.forms.form1.submit();
// or
document.forms['form1'].submit();

不起作用

document.forms.form1.reset();

或任何寻址变体,包括.getEmelentsById(“...”);方法工作得很好,我只是对这个问题感到难过,我的JS解释器填满的想法确实让我心烦意乱......

任何人都有任何不使用JQuery的想法。

1 个答案:

答案 0 :(得分:1)

由于form.reset()确实有效,但form.submit()没有,因此有些内容会覆盖表单上的submit方法。我敢打赌你有一个表单元素,其ID或名称为"提交":

<input id="submit" />

或者:

<input name="submit" />

这样form.submit将解析为输入元素,而不是表单的submit()方法。

Quick jsFiddle demo

简单的解决方法是更改​​元素的id。更难,更不明智的修复方法是获取对原型submit方法的引用,并在表单的上下文中调用它:

var f = document.forms.form1;
Object.getPrototypeOf(f).submit.call(f);

document.createElement("form").submit.call(document.forms.form1);