onsubmit несколько функций javascript
кто-нибудь знает, как onsubmit несколько функций? То, что я намеревался сделать, было: onsubmit проверяет, возвращают ли все эти функции true, если все они возвращают true, то я делаю действие="проверено.HTML-код"
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return validateName() || validatePhone() || validateAddress() ||
validateEmail()">
однако, что на самом деле произошло, компьютер проверяет код слева направо, и результат следующей функции заменит предыдущую, и так далее, до конца. Итак, даже если все 3 первые функции возвращают false, пока последняя является true, компьютер выполнит действие= " проверено.html", что я не собирался делать... может кто-нибудь, пожалуйста, помогите мне в этом, это было как 4 часов, я пытаюсь это исправить :S Спасибо!
кроме того, когда я пытался сделать что-то вроде <form onsubmit="return verify1() && verify2()">
, он не работает, все, что он делает, это проверить verify1 (), а не следующие... :(
CLARIFCATION: при отправке я хочу, чтобы были вызваны четыре функции проверки. Submit должен быть предотвращен, если все четыре функции не вернут true, но все четыре должны быть всегда, даже если некоторые из них вернет false.
7 ответов
использовать &
вместо &&
.
&&
использует оценку короткого замыкания и поэтому не оценивает правый операнд, если левый операнд является ложным.
&
всегда вычисляет оба операнда.
onsubmit="return !!(validateName() & validatePhone()
& validateAddress() & validateEmail());"
EDIT: Извините, я забыл, что &
не возвращает действительное логическое значение. Оберните выражение в круглые скобки и используйте double !
чтобы преобразовать его как (сейчас) показано. (Вам не нужно беспокоиться, если использовать в результате
измените свой код для использования и вместо OR
onsubmit= " return validateName () & & validatePhone () & & validateAddress () & & validateEmail ()"
причина в том, что если вы используете или когда-то эта первая функция возвращает true javascript, не будет проверять другие функции. Также вы не хотите использовать или потому, что если первая проверка была ложной, а вторая-истинной, форма все равно отправит, так как по крайней мере одна из ваших проверок ИСТИННЫЙ.
посмотреть скрипка чтобы показать, что это работает, обе проверки выполняют и показывают предупреждающее сообщение, но поскольку check2 возвращает false, форма не отправляет - если вы хотите поиграть с возвращаемыми результатами функций checks1 и check2 и использованием && и ||
после понимания проблемы лучше, вам нужно использовать один &, но потому что true & true
возвращает 1, а не true
вам нужно написать это так
onsubmit= " return ((validateName () & validatePhone () & validateAddress () & validateEmail()) == 1)"
если все, что вам нужно, это убедиться, что все функции возвращают true перед продолжением, затем используйте &&
не ||
и чтобы гарантировать, что выражение не будет предварительно оценено функцией return, поставьте дополнительные скобки
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return (validateName() && validatePhone() && validateAddress() &&
validateEmail() )">
создайте функцию-оболочку, которая вызывает каждую функцию и проверяет их возвращаемое значение. В любое время, если возвращаемое значение false, вы можете либо остановить отправку формы, вернув false в это время, либо оценить остальные вещи и, наконец, вернуть false.
Итак, JS код, который будет делать то, что вы хотите :
function validateForm() {
var isFormValid = true;
isFormValid &= validateName();
isFormValid &= validatePhone();
isFormValid &= validateAddress();
isFormValid &= validateEmail();
return isFormValid? true:false;
}
теперь в форме просто используйте:
<form id="myForm" name="myForm" action="checked.html" method="post" onsubmit="return validateForm();">
EDIT : сделал boo бу ниже, исправлено.
использование или неправильное, но причина и не работает, как вы ожидаете, из-за Short-circuit_evaluation.
onsubmit= " return validateName () & & validatePhone () & & validateAddress () & & validateEmail ()"
используйте этот код
чтобы проверить мою форму, я просто создал функцию validateForm () {} затем внутри этой функции я поместил весь код, необходимый для полной проверки. Затем используется onsubmit= " validateForm ()". Он проверяет его по порядку и подчиняется только в том случае, если все условия верны.
следующий метод проверяет первую функцию validateName (), и она будет обрабатывать, чтобы проверить следующую функцию, если только первая функция истинна, также для запуска третьей функции необходимо вернуть true первой и второй функции. Так что просто представьте, если все функции недействительны и даже у вас есть другое сообщение об ошибке, вы увидите только сообщение об ошибке первой функции. После прохождения функции validateName() вы можете увидеть сообщение об ошибке validatephone () ect.
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return (validateName() && validatePhone() && validateAddress() &&
validateEmail() )">
вы не можете использовать, если вы будет отображаться сообщение об ошибке в соответствии со всеми проверками при первом отправке , и вы можете использовать следующий метод, если хотите запустить всю функцию (или отобразить все ошибки проверки) при отправке.
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit=" if( ( validateName() && validatePhone() && validateAddress() &&
validateEmail() ) == false) { return false; } ">