在react应用程序中,有一个带有一些按钮和输入的表单:
<form>
<div>
{
['1', '10', '100'].map(val => (
<button onClick={() => console.log(val)}>
{val}
</button>
}
</div>
<div>
<input type='string' />
</div>
</form>
当聚焦于输入字段时,按"Enter"会导致第一个按钮启动(console.log('1')
)。
似乎与一些默认的表单行为有关,如将<form>
元素更改为<div>
,解决了这个问题。
并将event.preventDefault()
添加到输入的onKeyDown
处理程序也修复了这个问题,这表明有一些事件冒泡涉及。
从我的理解,按下'Enter'时,集中在一个表单的输入字段导致表单提交,和事件冒泡应该只触发父处理程序,所以这是相当令人困惑的我,第一个按钮,这是在兄弟元素将被触发
是的,这是正确的,有type
属性在按钮元素- https://www.w3schools.com/jsref/prop_pushbutton_type.asp另外,你可以注意到默认的type
属性是submit
,所以这意味着按钮可以在按下enter
键时被触发。
我认为你可以通过将type
属性设置为button
来解决这个问题,如下所示。
<button type="button" />