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"
.