#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, или изменить свою кнопку на oftype="button"
, чтобы она не отправляла форму (тогда не было бы необходимости возвращать false)3. Итак, вы говорите, что форма отправляется до выполнения последней части функции? Я только что протестировал это, используя
type=button
instead , который обычно не отправляет форму, и на этот раз он работает, что подтверждает идею о том, что форма отправляется доdocument.forms[2].submit()
выполнения.4. @NickParsons Извините, быстрый вопрос. Как бы вы предложили возвращать false, чтобы одновременно отключить кнопку, чтобы первая форма не была отправлена, и в то же время инициировать отправку второй формы? Очевидно, это можно сделать путем вложения или ссылки на другие функции, но есть ли более простой способ?
5. @definitelynotme Если я правильно понимаю, удаление
return false
из вашей функции и просто использованиеtype="button"
вашей кнопки в form1 должно сделать свое дело. Таким образом, когда вы нажимаете на кнопку отправки для form1, form1, естественно, не отправляет, поэтому вы можете передать все управление отправкой функции. Затем функция отвечает за отправку form2 или оповещение пользователя, если значение не задано.