对于内联事件监听器,我指的是用于事件注册的 HTML 元素属性,例如 onsubmit/onreset 属性,而不是用于注册事件的 dom 节点属性。
我问这个问题是因为当我注册一个向表单的 onsubmit/onreset 属性返回 false 的事件处理程序时,通过提交/重置执行提交/重置过程。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New Web Project</title>
<script type="text/javascript">
function f()
{
return false;
}
</script>
</head>
<body>
<form action="" id = "form" onsubmit = "f()" onreset = "f()">
<input type="text">
<input type = "submit" value = "submit">
<input type = "reset" value = "reset">
</form>
</body>
</html>
最佳答案
当您通过 HTML 属性提供事件处理程序时,您提供的字符串会创建一个函数,该函数会在事件发生时由浏览器调用。
因此,在您的示例中,onsubmit 和 onreset 属性创建两个等效于的函数:
function() {
f();
}
由于匿名函数不返回 false,因此不会阻止提交和重置事件。如果这就是您想要做的,您可以执行以下操作之一。
始终阻止默认处理:
onsubmit="f(); return false;" onreset="f(); return false;"
有条件地阻止默认处理(以及更好的代码风格,IMO):
onsubmit="return f();" onreset="return f();"
关于javascript - 在 JavaScript 中,事件处理程序是否有可能返回内联事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413284/