Некоторое время назад мне нужно что-то очень похожее ... и я получил это.
Итак, что я здесь изложу, так это то, как я делаю трюки, чтобы форма могла быть отправлена с помощью 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.