在我的网络应用程序的设计中,用户应该能够通过在文本输入中按 enter 直接提交表单,在这种情况下,不应提交该表单中的任何按钮,因为它们具有其他功能。为了避免默认按钮问题,我处理了keydown
事件并以编程方式提交了表单。
当我在Firefox中对此进行测试时,似乎在输入键上按下了表单中的第一个按钮。简单的解决方案是在keydown
事件处理程序中禁用该按钮。
然而, Chrome似乎“智能地”选择第一个非禁用按钮作为默认按钮,并且即使该按钮将被keydown
处理程序立即禁用,也会使用该按钮提交。
可以使用这个jsFiddle来测试效果。在 Firefox 中,在复选框禁用“第一个”按钮后,在输入中输入 press 只会导致一次提交。在 Chrome 中,总是有两个提交,一个来自 keydown,另一个来自按钮按下,即使两个按钮都被禁用!
这迫使我更改代码中的所有 keydown 处理程序以返回 false 或处理所有按钮单击并检查按钮是否被禁用。两者似乎都不是好的代码。
有更好的建议吗?