Некоторое время назад мне нужно было нечто очень похожее ... и я получил это.
То, что я здесь изложил, это то, как я делаю трюки, чтобы форма могла быть отправлена JavaScript без какой-либо проверки и выполнять проверку только тогда, когда пользователь нажимает кнопку (обычно кнопку отправки).
Для примера я буду использовать минимальную форму, только с двумя полями и кнопкой отправки.
Помните, что нужно:
Из JavaScript он может быть отправлен без какой-либо проверки. Однако, если пользователь нажимает такую кнопку, проверка должна быть выполнена, и форма должна отправляться только в том случае, если проверка прошла успешно.
Обычно все начинается примерно с этого (я удалил все лишние вещи, неважно):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
Посмотрите, как у тега формы нет onsubmit="..."
(помните, что это было условие не иметь его).
Проблема в том, что форма всегда отправляется, независимо от того, возвращает ли onclick
true
или false
.
Если я изменю type="submit"
на type="button"
, похоже, что он работает, но не работает. Он никогда не отправляет форму, но это легко сделать.
Итак, наконец, я использовал это:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
И на function Validator
, где return True;
, я также добавляю предложение отправки JavaScript, что-то похожее на это:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
id=""
только для JavaScript getElementById
, name=""
только для того, чтобы оно появлялось в данных POST.
Таким образом, он работает так, как мне нужно.
Я поместил это только для людей, которым не нужна функция onsubmit
в форме, но сделайте некоторую проверку, когда пользователь нажимает кнопку.
Почему мне не нужно отправлять данные в тег формы? Легко, на других частях JavaScript мне нужно выполнить отправку, но я не хочу, чтобы была какая-либо проверка.
Причина: если пользователь - тот, кто выполняет отправку, которую я хочу, и мне нужно выполнить проверку, но если это JavaScript, иногда мне нужно выполнить отправку, в то время как такие проверки будут избегать этого.
Это может звучать странно, но не при мысли, например: при входе в систему ... с некоторыми ограничениями ... например, не разрешать использовать сеансы PHP, и ни один из файлов cookie не разрешен!
Таким образом, любая ссылка должна быть преобразована в такую форму отправки, чтобы данные для входа не были потеряны.
Когда еще не выполнен вход, он также должен работать. Поэтому проверка ссылок не должна выполняться.
Но я хочу представить сообщение пользователю, если пользователь не ввел оба поля, user и pass. Поэтому, если кто-то отсутствует, форма не должна быть отправлена! есть проблема.
См. Проблему: форму нельзя отправлять, когда одно поле пусто, только если пользователь нажал кнопку, если это код JavaScript, он должен быть в состоянии отправить.
Если я сделаю работу с onsubmit
над тегом формы, мне нужно знать, пользователь это или другой JavaScript. Поскольку никакие параметры не могут быть переданы, это невозможно напрямую, поэтому некоторые люди добавляют переменную, чтобы сказать, должна ли быть выполнена проверка или нет. Первое, что нужно сделать в функции проверки, - это проверить значение этой переменной и т. Д. Слишком сложно, и код не говорит о том, что действительно нужно.
Таким образом, решение состоит в том, чтобы не добавлять отправку в тег формы. Insead положил его туда, где он действительно нужен, на кнопку.
С другой стороны, зачем ставить код отправки, поскольку концептуально я не хочу проверять передачу. Я действительно хочу подтверждение кнопки.
Не только код более понятен, но и там, где он должен быть. Просто запомните это:
- Я не хочу, чтобы JavaScript проверял форму (это всегда должно быть сделано PHP на стороне сервера)
- Я хочу показать пользователю сообщение о том, что все поля не должны быть пустыми, что требует JavaScript (на стороне клиента)
Так почему некоторые люди (подумайте или скажите мне), что это должно быть сделано при проверке на месте? Нет, концептуально я не делаю проверку на стороне клиента. Я просто что-то нажимаю на кнопку, так почему бы просто не позволить этому быть реализованным?
Ну, этот код и стиль отлично справляются с задачей. На любой JavaScript, который мне нужен, чтобы отправить форму, я просто поставил:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
И это пропускает проверку, когда она мне не нужна. Он просто отправляет форму и загружает другую страницу и т. Д.
Но если пользователь нажимает кнопку отправки (также известную как type="button"
, а не type="submit"
), проверка выполняется до того, как форма будет отправлена и, если она недействительна, не отправлена.
Надеюсь, это поможет другим не пытаться использовать длинный и сложный код. Просто не используйте onsubmit
, если не нужно, и используйте onclick
. Но просто не забудьте изменить type="submit"
на type="button"
и, пожалуйста, не забудьте сделать submit()
с помощью JavaScript.