转:IE6中Form.submit不提交的问题

本文探讨了在Internet Explorer 6中使用JavaScript提交表单遇到的问题及解决办法。作者发现,尽管在Firefox和Opera中该方法能正常工作,但在IE6中却未见响应。通过对提交时机的调整,最终解决了这一难题。

今天碰到一个很有趣的问题。
用From向提交数据,一是用<input type="submit"/>按钮,一是通过JavaScript脚本:formElement.submit()。不管哪种方法都是很简单的。但是今天我就在这个简单的地方遇到了麻烦。

我正在做的页面是用JavaScript准备数据填写Form然后提交。然而,在IE6下通过JavaScript提交数据时页面没有反应(也没有提示)!?奇怪的是,在FireFox/Opera下面一切正常?!

刚开始,我怀疑是程序的那个地方有逻辑错误,但是经过仔细检查后排除了。上网搜一下,也没有什么结果。

再次思考这个问题,难道是因为Form的数据还没有准备好?因为我的测试数据大概有十几K的样子,而微软的东西总是喜欢异步处理,那么就有这样的可能:写 入数据的函数返回并执行下面的submit(),但是实际上在IE内部并没有完成整个过程,从而导致submit()失败(但是为啥就没个提示呢)。

试一下,在submit()前先等一下,让出处理时间:
    ......
    function doSubmit(){formElem.submit();}
    setTimeout(doSubmit,0)
    ......
转一下,OK!!或许就是这个样子。

最后,再鄙视一下IE6。

在使用 JavaScript 提交表单时,开发者可能会遇到 `form.submit is not a function` 这一错误。此问题通常出现在某些浏览器(如 FireFox、360、IE8)中,尽管代码看起来是正确的,但依然报错。错误的根本原因与表单元素的命名冲突有关。 如果表单中存在一个 `name="submit"` 或 `id="submit"` 的元素,例如 `<input type="submit" name="submit" id="submit">`,浏览器会将该元素覆盖表单对象的 `submit()` 方法,导致无法调用原始的提交方法。这种情况下,调用 `form.submit()` 将会触发表单提交,而是返回对该元素的引用[^2]。 ### 解决方案 1. **避免使用 `submit` 作为表单子元素的 `name` 或 `id`** 修改表单中提交按钮的 `name` 或 `id` 属性,避免与原生方法名冲突。例如: ```html <input type="submit" id="formSubmit" value="Submit"> ``` 同时,在 JavaScript 中调用 `form.submit()` 时,确保使用的是表单对象本身,而是被覆盖的元素引用[^1]。 2. **使用 `document.getElementById` 获取表单对象** 确保获取的是 `<form>` 元素本身,而是通过 `document.forms` 或其他方式获取的引用。例如: ```javascript const form = document.getElementById('myForm'); form.addEventListener('submit', function (event) { event.preventDefault(); // 阻止默认提交行为 if (validateForm()) { form.submit(); // 安全调用 submit 方法 } }); ``` 3. **避免在 jQuery 和原生对象之间混淆使用** 如果使用 jQuery 操作表单,确保将原生 DOM 对象换为 jQuery 对象。例如: ```javascript const $form = $('#myForm'); $form.on('submit', function (event) { event.preventDefault(); if (validateForm()) { $form.get(0).submit(); // 调用原生 submit 方法 } }); ``` 或者在 AJAX 提交时避免使用 `form.submit()`,而是通过 `$.ajax()` 发送数据[^4]。 4. **使用 `requestSubmit()` 方法替代** HTML5 提供了 `requestSubmit()` 方法,该方法可以触发表单提交,而会受到命名冲突的影响: ```javascript const form = document.getElementById('myForm'); form.requestSubmit(); // submit 元素命名影响 ``` 该方法适用于现代浏览器,且会覆盖表单的 `onsubmit` 事件处理程序[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值