javascript - 为什么在表单内的 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
方法。但我不确定。
解决方案
推荐阅读
- python - 怎么让图片从天上掉下来
- flutter - 如何在 Flutter 中的每个构建上运行脚本?
- node.js - 为什么我不能将 npm 库更新到最新版本并卡在一个版本中?
- python - Telegram Python 电话答录机
- react-native - Flutter 生命周期事件
- javascript - 表格数据使用切换显示
- java - 合金分析仪:使用无图形界面
- azure - 如何在 Azure Logic Apps 中使用 ARM 模板创建 office365 api 连接?
- python - 如何使用 oAuth 2.0 将 Jira 与 python 烧瓶应用程序集成?
- java - 使 gradle 依赖项离线可用(发布到内部仓库?)