输入从表单中删除后提交失败(在Firefox中)

时间:2012-07-20 16:01:45

标签: javascript jquery file-upload

编辑:我简化了使用文本输入的示例。同样的错误。从表单中删除输入时,表单无法提交。 编辑:在Firefox 14中重复.Chrome没有相同的行为。

我有一个带有jquery的多文件上传表单,可以从表单中添加和删除文件输入元素。如果我删除其中一个输入,则form.submit()函数不会继续。以下是使用" text"的简化代码。投入。还有http://jsfiddle.net/carbontax/rMMuE/

的小提琴
    <form id="form-foo" method="POST">
        <div id="input-container-container">
       </div>
    </form>
    <input type="button" id="add-text-input" value="ADD TEXT INPUT">
    <input type="button" id="submit" value="SUBMIT">

脚本

    $('#submit').click(function() {
        $('#form-foo').submit();
    });

    $("#add-text-input").click(function() {
        var div = $('<div/>', {
            'class': 'input-container'
        }).append($('<button/>', {
            'class': 'delete-text-input',
            html: "X"
        }));
        var input = $('<input/>', {
            type: 'text',
            name: 'texts',
            'class': 'input-text'
        }).appendTo(div);
        div.appendTo($('#input-container-container'));
    });

    $('#form-foo').on('click', 'button.delete-text-input', function(e) {
        e.preventDefault();
        $(this).closest('div').remove();
    });

3 个答案:

答案 0 :(得分:3)

Satya Teja提供了一个有用的建议,即将提交按钮放在表单中,但我不知道它为什么会起作用。在我的情况下,我需要根据另一个事件的结果间接提交表格。所以这是解决方案。

HTML:在表单

中添加隐藏的提交按钮
    <form id="form-foo" method="POST">
        <div id="input-container-container">
       </div>
       <!-- workaround to allow submit after deleting a form element -->
       <input type="submit" id="form-foo-submit" style="display: none"/>
    </form>
    <input type="button" id="add-text-input" value="ADD TEXT INPUT">
    <input type="button" id="submit" value="SUBMIT">

脚本。不要在表单上调用submit(),而是在隐藏的提交按钮上调用click()。适用于Firefox,Chrome甚至IE6

    $('#submit').click(function() {
        // Instead of calling $('#form-foo').submit()
        $('#form-foo-submit').click();
    });

    $("#add-text-input").click(function() {
        var div = $('<div/>', {
            'class': 'input-container'
        }).append($('<button/>', {
            'class': 'delete-text-input',
            html: "X"
        }));
        var input = $('<input/>', {
            type: 'text',
            name: 'texts',
            'class': 'input-text'
        }).appendTo(div);
        div.appendTo($('#input-container-container'));
    });

    $('#form-foo').on('click', 'button.delete-text-input', function(e) {
        e.preventDefault();
        $(this).closest('div').remove();
    });

答案 1 :(得分:1)

保持在表格内提交不在外面..

<form id="form-foo" method="POST">
        <div id="input-container-container">
        </div>

    <input type="button" id="submit" value="SUBMIT">
    </form>

提交

答案 2 :(得分:1)

由于您的输入位于表单外部,因此不会提交任何内容。确保您要发送的所有数据都在表单标记之间