在JavaScript中,事件处理程序可能会返回内联事件侦听器吗?

时间:2012-07-10 12:25:53

标签: javascript

带有内联事件监听器的

我指的是用于事件注册的HTML元素属性,如onsubmit / onreset属性,而不是用于注册事件的dom节点属性。

我问,因为当我注册一个事件处理程序,它返回false给表单的onsubmit / onreset属性时,通过提交/重新设置提交/重置过程。

<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>

1 个答案:

答案 0 :(得分:2)

当您通过HTML属性提供事件处理程序时,您提供的字符串会创建一个在事件发生时由浏览器调用的函数。

因此,在您的示例中,onsubmit和onreset属性创建两个等效于:

的函数
function() {
  f();
}

因为匿名函数不返回false,所以不会阻止提交和重置事件。如果这是您想要做的,您可以执行以下操作之一。

始终阻止默认处理:

onsubmit="f(); return false;" onreset="f(); return false;"

有条件地阻止默认处理(以及更好的代码风格,IMO):

onsubmit="return f();" onreset="return f();"