javascript - 在 JavaScript 中,事件处理程序是否有可能返回内联事件监听器?

标签 javascript

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

相关文章:

javascript - 既然我们有 ES6 promise ,还有理由使用 Q 或 BlueBird 之类的 promise 库吗?

Javascript 编码检查器 ASCII/UFT8

javascript - 当我尝试向标记 django 添加多个单击监听器时,initMap 不是一个函数

javascript - 删除监听器范围内的事件监听器

Javascript Q 库浏览器支持

javascript - 获取数组推送之前的数据

Javascript 按交集对数组进行分组

javascript - 为什么我不能用 Javascript 写 [1,2,3].reduce(Math.max)?

javascript - 使用 Linux/Windows CLI 行工具模拟 JavaScript 按钮单击(http 请求)

javascript - Ember 数据 - 获取第一个集合