键盘事件如何触发兄弟按钮的点击事件? (jsfiddle里面)

时间:2013-08-22 12:50:03

标签: javascript jquery javascript-events

可以在此处测试和更改相关设置:http://jsfiddle.net/5hAQ8/9/

我有一个小表单(基本上只是一个带有清除按钮的输入字段)。 JavaScript是微不足道的,只是说明了问题。基本上它是输入(keyup),按钮(click / tap)和表单(submit)上的三个听众。 HTML非常简单:

<form>
    <input>
    <button>X</button>
</form>

X旨在清除该领域,但这不是重点。当有人按下[enter]时,即使输入处于焦点,该按钮也会被触发。您可以在上面链接的jsfiddle中自己测试。

在表单中按[enter]后,您将看到三个警报:一个用于输入,一个用于按钮,一个用于表单。我无法理解为什么按钮和表格会涉及到什么?

我对DOM事件的理解是源于输入的键盘事件,冒泡到文档。但我采取一切措施取消该事件。所以我的问题有三个:

  • 为什么活动会到达<button>
  • 为什么按钮会触发其监听器(即点击并点按),即使该事件是关键字?
  • 为什么不执行preventDefaults / stopPropagations。

2 个答案:

答案 0 :(得分:1)

这个答案可以追溯到问题评论中的细节。感谢Pointy的许多细节。

为什么活动会转到按钮为什么点击/点按

默认表单提交(在html5规范中定义)。显然这是触发点击(我没想到)。

为什么preventDefault无法启动

在关键字之前触发表单的隐式提交。这就解释了为什么preventDefault没有机会。它似乎没有标准化,但我测试的每个浏览器都这样做。

可能的解决方案

我想我会使用keydownkeypress来获取keyCode == 13,其余的是keyup。对我来说似乎是最不善解决的问题。 (由ninty9notout建议,谢谢!)

这很好地回答了这个由三部分组成的问题。谢谢所有贡献的人。

答案 1 :(得分:1)

您可以通过在按钮元素上设置type="button"来解决此问题。 这可以避免浏览器的任何默认行为。

  

可能的值是:           提交...,           reset ...,button:该按钮没有默认行为。它可以具有与元素事件相关联的客户端脚本,这些事件在事件发生时被触发

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button