这个问题是不言自明的。我不明白返回在以下代码中的作用:
<form onsubmit="return somefunction()">
这个问题是不言自明的。我不明白返回在以下代码中的作用:
<form onsubmit="return somefunction()">
您需要返回,以便将 true/false 传递给表单的提交事件(该事件会查找此信息并在为 false 时阻止提交)。
让我们看看一些标准的 JS:
function testReturn() { return false; }
如果您只是在任何其他代码(无论是 onclick 处理程序还是在其他地方的 JS 中)调用它,它将返回 false,但您需要对该值执行某些操作。
...
testReturn()
...
在那个例子中,返回值回来了,但没有发生任何事情。你基本上是说执行这个函数,我不在乎它返回什么。相反,如果你这样做:
...
var wasSuccessful = testReturn();
...
那么你已经对返回值做了一些事情。
这同样适用于 onclick 处理程序。如果您只是在 onsubmit 中调用该函数而没有返回,那么您是在说“执行此操作,但如果它返回 false,则不要阻止该事件”。这是在提交表单时执行此代码的一种方式,但不要让它停止事件。
添加返回值后,您就是说您正在调用的内容应确定事件(提交)是否应继续。
此逻辑适用于 HTML 中的许多 onXXXX 事件(onclick、onsubmit、onfocus 等)。
GenericTypeTea 所说的扩展 - 这是一个具体的例子:
<form onsubmit="return false">
上述表格不会提交,而...
<form onsubmit="false">
...什么都不做,即表单将提交。
没有return
,onsubmit
不会接收值,并且事件的执行就像根本没有任何处理程序一样。
false
从函数返回将停止事件继续。即它将停止表单提交。
IE
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
}
}
当 onsubmit(或任何其他事件)作为HTML 属性提供时,当为元素创建 DOM 对象时,属性(例如"return validate();"
)的字符串值作为实际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
函数调用接收到的返回值将作为提交处理程序的返回值传递,从而对控制表单的提交行为起作用。
如果没有return
在字符串中提供,则生成的onsubmit
处理程序将没有显式的 return 语句,并且在触发时它将返回undefined
(默认函数返回值),无论是否在这两种情况下都将validate()
返回true
或false
提交表单。
HTML 事件处理程序代码的行为类似于 JavaScript 函数的主体。许多语言(如 C 或 Perl)隐式返回函数体中最后一个表达式的值。JavaScript 不会,它会丢弃它并返回 undefined ,除非您编写显式return
EXPR。