Существует ли способ отправить HTML-форму с помощью JavaScript, который, как гарантируют, будет работать во всех ситуациях?
Я уточняю. Общий подход, кажется:
formElement.submit()
Это - вся польза и хорошо за исключением одной вещи. Поля формы доступны как атрибуты formElement
, таким образом, если существует поле с именем или идентификатором "text1", к этому можно получить доступ как formElement.text1
.
Это означает, что, если элементы назван, "отправляют" (быть этим его имя или его идентификатор), то formElement.submit()
не будет работать. Это вызвано тем, что formElement.submit
не будет метод формы, но поле с тем именем. К сожалению, довольно распространено, что кнопки отправки имеют "отправлять" имя или идентификатор.
Два примера, чтобы проиллюстрировать мой тезис. Во-первых, следующее НЕ будет работать, потому что элемент формы имеет имя, "отправьте":
Следующее будет работать все же. Единственная разница - то, что я удалил имя, "отправляют" от формы:
Так, есть ли какой-либо другой способ отправить HTML-форму с помощью JavaScript?
]Создайте другую форму в JavaScript, и применяйте его метод []submit()[
] на Вашей оригинальной форме:[
<html>
<script>
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
</script>
<form name="example" id="example" method="get" action="">
<input type="hidden" value="43" name="hid">
<button
type="button"
name="submit"
onclick="hack();return false;"
>Submit</button>
</form>
</html>
]
[][] форма.submit[
] является ссылкой на свежий и чистый метод отправки, а затем Вы используете [] apply(myForm)[
], чтобы выполнить его с оригинальной формой.[
Лучшая идея - не называть кнопку отправки "submit", но вы можете обойти ее -
function reallysubmitform(n){
n= n || 0;
var f= document.forms[n];
f.onsubmit= function(){
return true
};
var sub= f.elements['submit'];
if(sub && sub.type== 'submit') sub.click();
else f.submit();
}
reallysubmitform()
Отправка формы с помощью JavaScript не может быть безопасной.
Ваши пользователи могут просматривать ваш сайт на своем телефоне, отключили JavaScript, настроили источник вашей страницы или с помощью Lynx.
В любом случае, в целях доступности, вам понадобится старая добрая кнопка отправки HTML и некоторые проверки ввода на стороне сервера.
.] В Firefox [
] [formElement.constructor
]
[]returns "HTMLFormElement". Таким образом, вы можете отправить форму, используя:[
]. [HTMLFormElement.prototype.submit.call(formElement)
]
[] Это можно распространить и на другие браузеры: [
]. [formElement.constructor.prototype.submit.call(formElement)
] Итак, есть ли другой способ отправить HTML-форму с помощью JavaScript?
Update: Примите совет Джерома (в другом месте этой темы). Я оставлю этот ответ для исторического интереса, но он не так хорош и надежен, как решение от Jerome.
Следующий подход уродлив, но работает.
var x = document.forms.example;
var f = document.createElement('form');
f.action = x.action;
f.method = x.method;
f.enctype = x.enctype;
for (var i = 0; i < x.elements.length; i++) {
var el = x.elements[i];
if (el.name !== "submit") {
f.appendChild(el);
}
}
x.parentNode.replaceChild(f,x);
f.submit();