的onsubmit多个JavaScript函数(onsubmit multiple javascri

2019-06-17 15:18发布

有谁知道怎么的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。

Answer 1:

使用&代替&&

&&使用短路评价等,如果左边的操作数是falsy不评估右手操作。

&始终计算两个操作数。

onsubmit="return !!(validateName() & validatePhone()
                      & validateAddress() & validateEmail());"

编辑:对不起,我忘了&不会回到真正的布尔值。 裹在括号中的表达和使用双! 因为(现在)所示,将其转换。 (你不必如果使用的是结果的担心if测试,但是从事件处理函数的返回值应该是一个真正的布尔值。)

PS:这里有一个非常笨拙的演示表明,所有四个功能被调用,但生产出你所需要的整体true或false结果: http://jsfiddle.net/nnnnnn/svM4h/1/



Answer 2:

更改您的代码中使用,取而代之的OR

的onsubmit = “返回validateName()&& validatePhone()&& validateAddress()&& validateEmail()”

原因是,如果您使用或曾是第一个函数返回true的JavaScript不会刻意去检查等功能。 你也不想使用或因为如果第一次检查是假的,第二个是真正的形式仍然会因为你的支票的至少一个是实际的提交。

见小提琴显示此作品中,既有检查执行,并显示一条警告信息,但因为CHECK2返回false形式不提交-如果你想玩弄的checks1和CHECK2函数的返回结果和使用&&和||的

理解这个问题更好地后,你需要使用一个单一的和,而是因为true & true返回1,而不是true你需要把它写这样

的onsubmit = “返回((validateName()&validatePhone()&validateAddress()&validateEmail())== 1)”



Answer 3:

如果你需要的是确保所有的功能,然后再继续返回true,则使用&&|| 并确保该表达式没有得到由返回功能评估预maturally把一些额外的支架

<form id="myForm" name="myForm" action="checked.html" method="post"
onsubmit="return (validateName() && validatePhone() && validateAddress() &&
validateEmail() )">


Answer 4:

创建一个包装函数,它调用每个函数,并检查他们的返回值。 在如果返回值是假的任何时候,你可以停止形式由当时返回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


  • Answer 5:

    的onsubmit = “返回validateName()&& validatePhone()&& validateAddress()&& validateEmail()”

    使用此代码



    Answer 6:

    为了验证我的形式,我只是创建了一个名为validateForm()函数{}那么这个功能,我把所有这些是需要充分验证的代码里面。 然后使用的onsubmit = “validateForm()”。 它检查通过它,以便只有当所有条件都满足提交。



    Answer 7:

    以下方法检查第一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; } ">
    


    文章来源: onsubmit multiple javascript functions