有谁知道怎么的onsubmit多种功能? 我intented做的是:检查的onsubmit如果所有这些函数返回true,如果所有的人都返回true,那么我做的动作=“checked.html”
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return validateName() || validatePhone() || validateAddress() ||
validateEmail()">
然而,实际发生的情况是,计算机将检查代码,由左到右,下一个函数的结果将取代前一个,依此类推,直到结束。 因此,即使所有的3个第一函数返回false,只要最后一个是真实的,计算机将执行行动=“checked.html”,这是不是我intented做......任何人都可以请帮助我这一点,它一直样4小时,我正在努力解决这个问题:S谢谢!
此外,当我试图做类似<form onsubmit="return verify1() && verify2()">
这是行不通的,它的作用是检查verify1(),而不是那些如下...: (
CLARIFCATION:在提交时,我买4个验证函数被调用。 提交应该避免,除非所有四个功能返回true,但所有四个应始终调用,即使他们中的一些返回false。
使用&
代替&&
。
&&
使用短路评价等,如果左边的操作数是falsy不评估右手操作。
&
始终计算两个操作数。
onsubmit="return !!(validateName() & validatePhone()
& validateAddress() & validateEmail());"
编辑:对不起,我忘了&
不会回到真正的布尔值。 裹在括号中的表达和使用双!
因为(现在)所示,将其转换。 (你不必如果使用的是结果的担心if
测试,但是从事件处理函数的返回值应该是一个真正的布尔值。)
PS:这里有一个非常笨拙的演示表明,所有四个功能被调用,但生产出你所需要的整体true或false结果: http://jsfiddle.net/nnnnnn/svM4h/1/
更改您的代码中使用,取而代之的OR
的onsubmit = “返回validateName()&& validatePhone()&& validateAddress()&& validateEmail()”
原因是,如果您使用或曾是第一个函数返回true的JavaScript不会刻意去检查等功能。 你也不想使用或因为如果第一次检查是假的,第二个是真正的形式仍然会因为你的支票的至少一个是实际的提交。
见小提琴显示此作品中,既有检查执行,并显示一条警告信息,但因为CHECK2返回false形式不提交-如果你想玩弄的checks1和CHECK2函数的返回结果和使用&&和||的
理解这个问题更好地后,你需要使用一个单一的和,而是因为true & true
返回1,而不是true
你需要把它写这样
的onsubmit = “返回((validateName()&validatePhone()&validateAddress()&validateEmail())== 1)”
如果你需要的是确保所有的功能,然后再继续返回true,则使用&&
不||
并确保该表达式没有得到由返回功能评估预maturally把一些额外的支架
<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return (validateName() && validatePhone() && validateAddress() &&
validateEmail() )">
创建一个包装函数,它调用每个函数,并检查他们的返回值。 在如果返回值是假的任何时候,你可以停止形式由当时返回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实施例。
编辑:制造低于布布,纠正。
使用OR是不正确的,但原因,而不是工作,你是如何期待是因为短circuit_evaluation 。
OR:评估停在第一个操作数是真实的,则返回true AND:评价停在第一个操作数是假的,则返回false
的onsubmit = “返回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; } ">