【问题标题】:In JavaScript is it possible that event handlers return to inline evenet listeners?在 JavaScript 中,事件处理程序是否有可能返回到内联事件侦听器?
【发布时间】:2012-07-10 12:25:52
【问题描述】:

对于内联事件监听器,我指的是用于事件注册的 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>

【问题讨论】:

  • 你能举个例子说明你的问题吗,因为你的问题很不清楚。
  • 是的,使用onsubmit="return f();"

标签: javascript


【解决方案1】:

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

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

function() {
  f();
}

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

始终阻止默认处理:

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

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

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

【讨论】:

  • 注意:无论哪种情况,function f产生错误时都不会发生阻塞。
猜你喜欢
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多