jef*_*eff 4 javascript dom-events reactjs
我的字段 onClick 事件切换下拉列表, onFocus 事件打开它。
当 onFocus 事件被触发时,onClick 事件随后被触发并关闭新打开的下拉菜单。如果 onFocus 被触发,如何防止点击触发?
preventDefault 和 stopPropagation 不起作用,这两个事件总是被触发
<TextInputV2
label={label}
onChange={handleInputOnChange}
onClick={handleOnClick}
onFocus={handleOnFocus}
onKeyUp={handleInputOnKeyUp}
readOnly={!searchable}
value={inputValue}
/>
Run Code Online (Sandbox Code Playgroud)
......
const handleOnFocus = (event: React.FocusEvent): void => {
if (!isOpen) {
changeIsOpen(true)
}
}
const handleOnClick = (event: React.SyntheticEvent): void => {
if (!searchable) {
toggleOpen()
}
}
Run Code Online (Sandbox Code Playgroud)
您会想要更改onClick为onMouseDown. 由于事件顺序是
- 鼠标按下
- 改变(聚焦输入)
- 模糊(在聚焦元素上)
- 重点
- 鼠标向上
- 点击
- 双击
来自:这个答案
你想在焦点事件之前阻止默认/stoPropagation,这意味着你必须使用“onMouseDown”在焦点事件被触发之前正确停止它。
在您的情况下,它将是:
<TextInputV2
label={label}
onChange={handleInputOnChange}
onMouseDown={handleOnClick}
onFocus={handleOnFocus}
onKeyUp={handleInputOnKeyUp}
readOnly={!searchable}
value={inputValue}
/>
Run Code Online (Sandbox Code Playgroud)
<TextInputV2
label={label}
onChange={handleInputOnChange}
onMouseDown={handleOnClick}
onFocus={handleOnFocus}
onKeyUp={handleInputOnKeyUp}
readOnly={!searchable}
value={inputValue}
/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |