Короче говоря: измените id вашей кнопки отправки на что-то отличное от «отправить». Также не устанавливайте name на это значение.
Теперь немного глубже. В общем случае document.formname.submit
- это метод, который при вызове отправляет форму. Однако в вашем примере document.formname.submit
больше не метод, а узел DOM, представляющий кнопку.
Это происходит потому, что элементы формы доступны как атрибуты ее узла DOM через их атрибуты name
и id
. Эта формулировка немного сбивает с толку, так что вот пример:
<form name="example" id="example" action="/">
<input type="text" name="exampleField" />
<button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button>
</form>
В этом примере document.forms.example.exampleField
- это узел DOM, представляющий поле с именем «exampleField». Вы можете использовать JS для доступа к его свойствам, таким как его значение: document.forms.example.exampleField.value
.
Однако в этом примере есть элемент формы, называемый «отправить», и это кнопка отправки, доступ к которой можно получить с помощью document.forms.example.submit
. Это перезаписывает предыдущее значение, которое было функцией, которая позволяет вам отправить форму.
EDIT:
Если переименование поля вам не подходит, есть другое решение. Незадолго до написания этого я оставил вопрос на сайте и получил ответ в виде аккуратного хакерского JavaScript-кода:
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
См. Как надежно отправить HTML-форму с помощью JavaScript? для получения полной информации