Как надежно отправить HTML-форму с JavaScript?

Существует ли способ отправить HTML-форму с помощью JavaScript, который, как гарантируют, будет работать во всех ситуациях?

Я уточняю. Общий подход, кажется:

formElement.submit()

Это - вся польза и хорошо за исключением одной вещи. Поля формы доступны как атрибуты formElement, таким образом, если существует поле с именем или идентификатором "text1", к этому можно получить доступ как formElement.text1.

Это означает, что, если элементы назван, "отправляют" (быть этим его имя или его идентификатор), то formElement.submit() не будет работать. Это вызвано тем, что formElement.submit не будет метод формы, но поле с тем именем. К сожалению, довольно распространено, что кнопки отправки имеют "отправлять" имя или идентификатор.

Два примера, чтобы проиллюстрировать мой тезис. Во-первых, следующее НЕ будет работать, потому что элемент формы имеет имя, "отправьте":

Следующее будет работать все же. Единственная разница - то, что я удалил имя, "отправляют" от формы:

Так, есть ли какой-либо другой способ отправить HTML-форму с помощью JavaScript?

18
задан Peter Mortensen 4 January 2010 в 15:12
поделиться

5 ответов

[

]Создайте другую форму в 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)[], чтобы выполнить его с оригинальной формой.[

].
32
ответ дан 30 November 2019 в 07:28
поделиться

Лучшая идея - не называть кнопку отправки "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()

1
ответ дан 30 November 2019 в 07:28
поделиться

Отправка формы с помощью JavaScript не может быть безопасной.

Ваши пользователи могут просматривать ваш сайт на своем телефоне, отключили JavaScript, настроили источник вашей страницы или с помощью Lynx.

В любом случае, в целях доступности, вам понадобится старая добрая кнопка отправки HTML и некоторые проверки ввода на стороне сервера.

.
0
ответ дан 30 November 2019 в 07:28
поделиться
[

] В Firefox [

] [
formElement.constructor
] [

]returns "HTMLFormElement". Таким образом, вы можете отправить форму, используя:[

]. [
HTMLFormElement.prototype.submit.call(formElement)
] [

] Это можно распространить и на другие браузеры: [

]. [
formElement.constructor.prototype.submit.call(formElement)
]
1
ответ дан 30 November 2019 в 07:28
поделиться

Итак, есть ли другой способ отправить 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();
2
ответ дан 30 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: