使用表单验证:为什么onsubmit =“return functionname()”而不是onsubmit =“functionname()”?

时间:2011-03-04 15:41:41

标签: javascript javascript-events

这个问题非常明显。我不明白返回在以下代码中做了什么:

<form onsubmit="return somefunction()">

6 个答案:

答案 0 :(得分:52)

你需要返回,所以true / false被传递给表单的提交事件(如果它变为false,它会查找这个并阻止提交)。

让我们看看一些标准的JS:

function testReturn() { return false; }

如果您只是在任何其他代码中调用它(无论是onclick处理程序还是其他地方的JS),它将返回false,但您需要对该值执行某些操作。

...
testReturn()
...

在该示例中,返回值将返回,但不会发生任何事情。你基本上是说执行这个函数,我不在乎它返回什么。相反,如果你这样做:

...
var wasSuccessful = testReturn();
...

然后你已经用返回值做了一些事情。

同样适用于onclick处理程序。如果你只是在onsubmit中调用没有返回的函数,那么你就是说“执行此操作,但如果返回false则不要阻止该事件。”这是表示提交表单时执行此代码的一种方式,但不要让它停止事件。

一旦你添加了回报,你就说你正在调用的东西应该确定事件(提交)是否应该继续。

此逻辑适用于HTML中的许多onXXXX事件(onclick,onsubmit,onfocus等)。

答案 1 :(得分:13)

GenericTypeTea所说的扩展 - 这是一个具体的例子:

<form onsubmit="return false">

上述表格不会提交,而是......

<form onsubmit="false">

...什么都不做,即表单将提交

如果没有returnonsubmit就不会收到值,而且事件的执行就像没有任何处理程序一样。

答案 2 :(得分:11)

从函数返回false将停止事件继续。即它将停止提交表单。

function someFunction()
{
    if (allow) // For example, checking that a field isn't empty
    {
       return true; // Allow the form to submit
    }
    else
    {
       return false; // Stop the form submitting
    }
}

答案 3 :(得分:4)

HTML事件处理程序代码的行为类似于JavaScript函数的主体。许多语言(如C或Perl)隐式返回函数体中计算的最后一个表达式的值。 JavaScript没有,它会丢弃它并返回undefined,除非你写一个明确的return EXPR

答案 4 :(得分:4)

当onsubmit(或任何其他事件)作为 HTML属性提供时,属性的字符串值(例如&#34; return validate();&#34;)被注入为为元素创建DOM对象时,实际的 onsubmit处理函数正文

以下是浏览器控制台中的简要说明:

var p = document.createElement('p');
p.innerHTML = '<form onsubmit="return validate; // my statement"></form>';
var form = p.childNodes[0];

console.log(typeof form.onsubmit);
// => function

console.log(form.onsubmit.toString());
// => function onsubmit(event) {
//      return validate(); // my statement
//    }

因此,如果注入语句中提供了 return 关键字;当触发提交处理程序时,从validate函数调用接收的返回值将作为提交处理程序的返回值传递,从而生效控制表单的提交行为。

如果没有字符串中提供的返回,生成的onsubmit处理程序将没有显式的return语句,并且在触发时它将返回 undefined (默认函数返回),而不管validate()是否返回true或者错误,并且在两种情况下都会提交表格。

答案 5 :(得分:0)

<script>
function check(){
    return false;
}
 </script>

<form name="form1" method="post" onsubmit="return check();" action="target">
<input type="text" />
<input type="submit" value="enviar" />

</form>