这个问题非常明显。我不明白返回在以下代码中做了什么:
<form onsubmit="return somefunction()">
答案 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">
...什么都不做,即表单将提交。
如果没有return
,onsubmit
就不会收到值,而且事件的执行就像没有任何处理程序一样。
答案 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>