document.forms[1] отправляет document.forms[0]. Почему?

#javascript

#javascript

Вопрос:

 function newcheckform() { 
   if(document.forms[0].term1.value == "") { 
     alert("Field cannot be empty!");
     return false;
   } else document.forms[1].submit();
 }


 window.onload = function() { 
  document.getElementById("form-button1").onclick = newcheckform;

} 
 <form action="firstform.php" id="firstform">
  <input type="search" name="term1" id="termid1" placeholder="first form">
  <button id="form-button1">Submit1</button>
</form>


<form action="secondform.php" id="secondform">
  <input type="search" name="term2" id="termid2" placeholder="second form">
  <button id="form-button2">Submit2</button>
</form> 

Когда submit button нажата кнопка, функция проверяет, является ли ввод firstform пустым, и если нет, то она должна отправить forms[1] , то есть secondform , все же firstform отправляется. Почему?

То же самое не произойдет, если вы вручную используете form атрибут на первой кнопке для таргетинга secondform .

Может быть, это потому, что, поскольку кнопка находится внутри формы, когда я нажимаю на нее, форма отправляется быстрее, чем требуется скрипту для отправки secondform . Я не уверен, имеет ли это смысл.

Комментарии:

1. Пожалуйста, можете ли вы никогда не использовать onclick для отправки форм? Клавиша ввода должна отправлять формы, прекратите ее подавлять

2. @definitelynotme Кнопка в форме, естественно, приведет к отправке формы. form1 отправляется вашей кнопкой, а не вашим JS. Вы можете вернуться false , чтобы отключить отправку form1, или изменить свою кнопку на of type="button" , чтобы она не отправляла форму (тогда не было бы необходимости возвращать false)

3. Итак, вы говорите, что форма отправляется до выполнения последней части функции? Я только что протестировал это, используя type=button instead , который обычно не отправляет форму, и на этот раз он работает, что подтверждает идею о том, что форма отправляется до document.forms[2].submit() выполнения.

4. @NickParsons Извините, быстрый вопрос. Как бы вы предложили возвращать false, чтобы одновременно отключить кнопку, чтобы первая форма не была отправлена, и в то же время инициировать отправку второй формы? Очевидно, это можно сделать путем вложения или ссылки на другие функции, но есть ли более простой способ?

5. @definitelynotme Если я правильно понимаю, удаление return false из вашей функции и просто использование type="button" вашей кнопки в form1 должно сделать свое дело. Таким образом, когда вы нажимаете на кнопку отправки для form1, form1, естественно, не отправляет, поэтому вы можете передать все управление отправкой функции. Затем функция отвечает за отправку form2 или оповещение пользователя, если значение не задано.