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();">

вот рабочий пример JSFiddle.

EDIT : сделал boo бу ниже, исправлено.

использование или неправильное, но причина и не работает, как вы ожидаете, из-за Short-circuit_evaluation.

  • или: оценка останавливается на первом операнде, который является true и true возвращается
  • и: оценка останавливается на первом операнде, который является false и false возвращается

  • 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; } ">