Измените значение ввода, затем отправьте форму в JavaScript - PullRequest
42 голосов
/ 02 августа 2011

Я сейчас работаю над базовой формой. Что я хочу сделать с этой формой, так это то, что при нажатии кнопки «Отправить» / «сначала» изменить значение поля, а затем отправить форму как обычно. Все это выглядит примерно так:

<form name="myform" id="myform" action="action.php">
<input type="hidden" name="myinput" value="0" />
<input type="text" name="message" value="" />
<input type="submit" name="submit" onclick="DoSubmit()" />
</form>

И вот как далеко я зашел с JavaScript. Он изменяет значение myinput на 1, но не отправляет форму. Я действительно нуби из JavaScript, так что прости меня, если это слишком простой вопрос, но я просто не понимаю, как это сделать.

function DoSubmit(){
  document.myform.myinput.value = '1';
  document.getElementById("myform").submit();
}

Ответы [ 8 ]

57 голосов
/ 02 августа 2011

Вместо этого вы можете сделать что-то вроде этого:

<form name="myform" action="action.php" onsubmit="DoSubmit();">
<input type="hidden" name="myinput" value="0" />
<input type="text" name="message" value="" />
<input type="submit" name="submit" />
</form>

А затем измените функцию DoSubmit, чтобы она просто возвращала true, указывая, что «все в порядке, теперь вы можете отправить форму» в браузер:

function DoSubmit(){
  document.myform.myinput.value = '1';
  return true;
}

РЕДАКТИРОВАТЬ: Я бы также не хотел использовать события onclick для кнопки отправки; порядок событий не сразу очевиден, и ваш обратный вызов не будет вызван, если пользователь отправит, например, нажав return в текстовом поле.

6 голосов
/ 02 августа 2011
document.getElementById("myform").submit();

Это не будет работать, так как у вашего тега формы нет идентификатора.

Измените его следующим образом, и оно должно работать:

<form name="myform" id="myform" action="action.php">
5 голосов
/ 27 мая 2013

Вот простой код, вы должны установить идентификатор для ввода здесь, назовите его «myInput»:

      var myform = document.getElementById('myform');
      myform.onsubmit = function(){ 
                    document.getElementById('myInput').value = '1';
                    myform.submit();
                  };
5 голосов
/ 02 августа 2011

Нет.Когда вы вводите тип ввода, вы должны объявить событие onsubmit в разметке, а затем внести необходимые изменения.Это означает, что в вашем теге формы определено значение onsubmit.

В противном случае измените тип ввода на кнопку, а затем определите событие onclick для этой кнопки.

2 голосов
/ 02 августа 2011

Вы пытаетесь получить доступ к элементу на основе атрибута name, который работает для обратной передачи на сервер, но javascript отвечает на атрибут id. Добавьте id с тем же значением, что и name, и все должно работать нормально.

<form name="myform" id="myform" action="action.php">
  <input type="hidden" name="myinput" id="myinput" value="0" />
  <input type="text" name="message" id="message" value="" />
  <input type="submit" name="submit" id="submit" onclick="DoSubmit()" />
</form>

function DoSubmit(){
  document.getElementById("myinput").value = '1';
  return true;
}
1 голос
/ 30 марта 2014

Моя проблема оказалась в том, что я назначил document.getElementById("myinput").Value = '1';

Обратите внимание на заглавную V в Value?Как только я изменю это на маленький случай т.е.значение, данные начали отправлять.Как ни странно, он не выдавал никаких ошибок Javascript

0 голосов
/ 18 марта 2019

Это может помочь вам.

Ваш HTML

<form id="myform" action="action.php">
<input type="hidden" name="myinput" value="0" />
<input type="text" name="message" value="" />
<input type="submit" name="submit" onclick="save()" />
</form>

ВАШ СКРИПТ

    <script>
        function save(){
            $('#myinput').val('1');
            $('#form').submit();
        }
    </script>
0 голосов
/ 06 марта 2015

Можете ли вы использовать onchange Событие

<form name="myform" id="myform" action="action.php">
<input type="hidden" name="myinput" value="0" onchange="this.form.submit()"/>
<input type="text" name="message" value="" />
<input type="submit" name="submit" onclick="DoSubmit()" />
</form>
...