如果我在beforeSubmit或beforeSend中删除DOM中的表单(无关紧要),我发现在IE和FF中,http请求永远不会发出。调用jquery.form.js中的form.submit()第296行,但不会发出http请求。它虽然在chrome中正常工作。
示例代码:
$('#form1').ajaxForm(
{
beforeSubmit: function(array, matched_set, options)
{
// this line removes #form1 from the DOM.
// it is still available to jquery form plugin by means of closure
// line 296 form.submit() in jquery.form.js is hit,
// but IE and FF never emit http request. If I remove this line, it works.
$('#jqm_window').html(waiting_page);
},
铬: 火狐: 使用chrome时,fiddler中会捕获http跟踪(但不能与其他浏览器一起使用):
答案 0 :(得分:1)
这不是一个jquery问题。 IE,FF如果在提交之前从DOM中删除,则不提交表单。完整代码:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.6.1.min.js">
</script>
<script>
$(document).ready(function()
{
$('#test').click(function(e)
{
e.preventDefault();
var form = $('#uploadForm')[0];
// IE and FF will not submit the form if its removed from the DOM
// Chrome doesn't care. you will get 404 error, as it submits the form to non-existent files.php
form.parentNode.removeChild(form);
form.submit();
});
});
</script>
</head>
<body>
<form id="uploadForm" action="files.php" method="POST" enctype="multipart/form-data">
File: <input type="file" name="file" />
<input type="submit" value="Submit" />
</form>
<a href="#" id="test">Click to test</a>
</body>
</html>
答案 1 :(得分:0)
我有同样的问题。我创建了jQuery表单对象并调用了提交功能,该功能在Chrome中运行良好但在Firefox中无效。
Chrome和Firefox有不同的js引擎,在Firefox中你不能提交不在DOM中的表单元素。