Javascript form.submit() не работает в Firefox

На этом есть несколько вопросов/ответов, здесь и здесь и в другом месте, но все они кажутся специфичными для JQuery и, похоже, не применимы к этому (например, я НЕ, создавая новый объект Form, это существующая форма в документе. Также я НЕ, используя JQuery вообще).

У меня есть форма, которая должна быть изменена перед отправкой по соображениям совместимости с IE7. Мне нужно удалить все теги BUTTON из моей формы, а затем добавить скрытое поле, но это все в существующей форме на существующей странице HTML. Этот код работает правильно в IE и Chrome, но не работает в Firefox (версии 23 и 24 оба протестированы).

    buttonClickFunction(formName, buttonObject) {
        var formObject = document.forms[formName];
        var i = 0;

        // Strip out BUTTON objects
        for (i=0;i<formObject.length;i++) {
            if (formObject[i].tagName === 'BUTTON') {
                formObject[i].parentNode.removeChild(formObject[i]);
                i--;
            }
        }

        // Create new field
        var newField = document.createElement('input');
        newField.type = 'hidden';
        newField.id=buttonObject.id;
        newField.name = buttonObject.name;
        if (buttonObject.attributes['value'] != null) {
            newField.value = buttonObject.attributes['value'].value;
        } else {
            newField.value = buttonObject.value;
        }

        // Submit form
        formObject.appendChild(newField);
        document.forms[formName].appendChild(newField);
        document.forms[formName].submit();
    }

В дополнение к document.forms[formName].submit() я также попробовал formObject.submit() - оба работают в Chrome, но оба не работают в Firefox. Я не понимаю, почему это не сработало - я проследил через JS и наблюдал за тем, что document.forms[formName].submit() выполняется - исключение не появляется, но ничего не происходит на сервере.

Может ли кто-нибудь определить, почему Firefox не будет отправлять эту форму, и как я могу ее исправить?

Ответы

Ответ 1

Firefox ожидает, что при отправке формы у вас есть хотя бы кнопка отправки, то есть должно быть что-то вроде:

<button type="submit">Click me</button>

или

<input type="submit" value="Click me" />

Когда вы используете первый в своем коде, он не будет работать (потому что вы отбрасываете все кнопки перед отправкой формы). Когда вы используете второй вариант, он будет работать, также в Firefox. Как вы можете видеть в этой скрипке: http://jsfiddle.net/q9Dzc/1/

Ответ 2

Для тех, у кого возникла проблема с отправкой Firefox с последующим изменением/повторной загрузкой страницы, вам нужно поместить ваш код перенаправления в обратный вызов $.post:

$(".form").submit(function(e){
    e.preventDefault();
    $.post("submit.php", {data: textData}, function(){
        history.go(-1);
    });
    return false;
});

Ответ 3

У меня было похожее поведение, когда form.submit() не работал в Firefox, но работал в других браузерах. Просто убедитесь, что все кнопки в форме содержат type="button".