首页 > 解决方案 > 为什么在表单内的 onclick 事件上调用名为“submit()”的函数在 WebKit 中的行为不同?

问题描述

我注意到我的一个网络应用程序上的一个表单正在提交而不是调用 Javascript 函数,但仅在任何 iOS 浏览器 (WebKit) 上。表单上没有提交按钮,只有一个带有onclick="submit()"属性的锚点。似乎在 WebKit 中,表单的submit()方法被调用而不是我自己的。

这是重现该问题的示例代码:

<html>
<body>
    <form id="my-form">
        <a onclick="submit()" href="#">Test</a>
    </form>
    <script>
        function submit() {
            console.log("Hello!");
        }
    </script>
</body>
</html>

在非 WebKit 浏览器上运行它只会输出“Hello!” 在控制台上。在 WebKit 浏览器上运行它会刷新页面。

我在 JS Bin 上创建了一个更全面的示例。在该示例中,我为表单的提交事件和隐藏的输入字段添加了一个事件侦听器。我没有包含该submit()功能。正如您将看到的,当单击 WebKit 浏览器上的链接时,页面将刷新,您会注意到 URL 发生了变化。但是在其他浏览器上它不会并且会submit()在控制台上输出缺少方法的错误。非常奇怪的是,在 WebKit 中,页面会像提交表单一样刷新,但不会触发事件监听器。

更改函数的名称为我解决了这个问题。但我想知道为什么它在 WebKit 中的行为会有所不同。我最好的猜测是 WebKit 正在调用表单的submit方法。但我不确定。

标签: javascripthtmlioswebkit

解决方案


推荐阅读