JQuery ajaxForm:如果在beforeSubmit中从DOM中删除了表单,则不会提交表单

时间:2011-05-15 15:56:59

标签: jquery ajaxform

如果我在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);
        },

铬: enter image description here 火狐: enter image description here 使用chrome时,fiddler中会捕获http跟踪(但不能与其他浏览器一起使用): enter image description here

2 个答案:

答案 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中的表单元素。