有谁知道如何提交多个功能?我打算做的是:onsubmit检查所有这些函数是否返回true,如果所有这些函数都返回true,那么我执行action =“checked.html”
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return validateName() || validatePhone() || validateAddress() ||
validateEmail()">
然而,实际发生的是,计算机从左到右检查代码,下一个函数的结果将替换前一个,依此类推,直到结束。所以,即使所有3个第一个函数都返回false,只要最后一个函数为true,计算机就会执行action =“checked.html”,这不是我打算做的......有人可以请帮助我这个,就像4个小时我试图解决它:谢谢!
此外,当我尝试执行类似<form onsubmit="return verify1() && verify2()">
的操作时,它不起作用,它所做的只是检查verify1(),而不是以下的那些...... :(
CLARIFCATION:在提交时,我想要调用四个验证函数。除非所有四个函数都返回true,否则应该阻止提交,但是即使其中一些函数返回false,也应该始终调用所有四个函数。
答案 0 :(得分:20)
使用&
代替&&
。
&&
使用短路评估,因此如果左侧操作数是假的,则不会评估右侧操作数。
&
总是评估两个操作数。
onsubmit="return !!(validateName() & validatePhone()
& validateAddress() & validateEmail());"
编辑:抱歉,我忘了&
不会返回实际的布尔值。将表达式包装在括号中并使用双!
将其转换为(现在)显示。 (如果在if
测试中使用结果,则无需担心,但事件处理程序的返回值应该是实际的布尔值。)
P.S。:这是一个相当笨重的演示,表明所有四个函数都被调用但产生了你需要的整体真假结果:http://jsfiddle.net/nnnnnn/svM4h/1/
答案 1 :(得分:7)
将您的代码更改为使用AND代替OR
onsubmit =“return validateName()&amp;&amp; validatePhone()&amp;&amp; validateAddress()&amp;&amp; validateEmail()”
原因是如果你使用OR,那么第一个函数返回true javascript将不会费心去检查其他函数。此外,您不想使用OR,因为如果第一次检查为false且第二次检查为true,则表单仍将提交,因为至少有一项检查为TRUE。
请参阅fiddle以显示此工作,两个检查都执行并显示警告消息,但因为check2返回false,表单不提交 - 如果您想要使用checks1和check2函数的返回结果并且使用&amp;&amp;和||
在更好地理解问题后,您需要使用单个&amp;,但因为true & true
返回1而不是true
,您需要像这样写
onsubmit =“return((validateName()&amp; validatePhone()&amp; validateAddress()&amp; validateEmail())== 1)”
答案 2 :(得分:3)
如果你需要的是确保所有函数在继续之前都返回true,那么使用&&
而不是||
并确保表达式不会在返回函数的前期得到一些额外的评估括号
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return (validateName() && validatePhone() && validateAddress() &&
validateEmail() )">
答案 3 :(得分:2)
创建一个包装函数,它调用每个函数并检查它们的返回值。在任何时候如果返回值为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();">
Here is a working JSFiddle Example.
编辑:在下面做了一个嘘声,纠正了。使用OR是不正确的,但原因是因为Short-circuit_evaluation而导致AND无法正常工作。
答案 4 :(得分:0)
onsubmit =“return validateName()&amp;&amp; validatePhone()&amp;&amp; validateAddress()&amp;&amp; validateEmail()”
使用此代码
答案 5 :(得分:0)
为了验证我的表单,我只是创建了一个名为validateForm(){}的函数,然后在这个函数中我放了完整验证所需的所有代码。然后使用onsubmit =&#34; validateForm()&#34;。它按顺序检查它,只在所有条件都为真时才提交。
答案 6 :(得分:0)
以下方法检查第一个validateName()函数,如果只有第一个函数为真,它将处理检查下一个函数,同时激活第三个函数需要返回第一个函数的真值。第二个功能。所以想象一下,如果所有功能都无效&amp;即使您有不同的错误消息,您将只看到第一个功能的错误消息。一旦validateName()函数通过,您可能会看到validatePhone()等错误消息。
<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; } ">