我正在帮助有网页的人遇到问题,我整理了验证部分,但提交过程的行为并不像您期望的那样。
为了捕获并停止默认事件,我在函数头部使用了以下内容
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的想法。
答案 0 :(得分:1)
由于form.reset()
确实有效,但form.submit()
没有,因此有些内容会覆盖表单上的submit
方法。我敢打赌你有一个表单元素,其ID或名称为"提交":
<input id="submit" />
或者:
<input name="submit" />
这样form.submit
将解析为输入元素,而不是表单的submit()
方法。
简单的解决方法是更改元素的id。更难,更不明智的修复方法是获取对原型submit
方法的引用,并在表单的上下文中调用它:
var f = document.forms.form1;
Object.getPrototypeOf(f).submit.call(f);
或
document.createElement("form").submit.call(document.forms.form1);