![](/img/trans.png)
[英]How can I prevent the OnBlur event from triggering when the page freezes in IE11
[英]How can I prevent onBlur event from firing?
我正在尝试使用提供建议的下拉菜单来构建输入。 我有一个使用 onBlur 的输入元素,从技术上讲,当在外部单击时会删除 ul 元素。 当我单击 ul 元素时,它也会删除 ul 元素,这会在输入上触发 onBlur 事件。 有没有办法实现 onBlur 防止 ul 元素触发 onBlur 事件?
import React, { useState, useEffect, useRef } from "react";
import "./styles.css";
const Autocomplete = (props) => {
const [userInput, setUserInput] = useState("");
const [listResults, setListResults] = useState([]);
const [openModal, setOpenModal] = useState(false);
useEffect(() => {
const filteredResults = props.options.filter((option) =>
option.includes(userInput)
);
setListResults(filteredResults);
}, [userInput, props.options]);
const handleInput = (event) => {
setUserInput(event.target.value);
};
const handleInputClick = () => {
setOpenModal(!openModal);
};
const handleClickOption = (data) => {
setUserInput(data);
setOpenModal(false);
ulEl.current.focus();
};
return (
<div className="container">
<input
name="search-input"
value={userInput}
onChange={handleInput}
autoComplete="off"
onFocus={handleInputClick}
onBlur={handleInputClick}
/>
<ul className="search-list">
{openModal &&
listResults &&
listResults.map((data, key) => (
<li
key={key}
onClick={() => {
handleClickOption(data);
}}
>
{data}
</li>
))}
</ul>
</div>
);
};
export default Autocomplete;
任何帮助将不胜感激
简短的回答,只需将其添加到您的元素中
onMouseDown={(e) => e.preventDefault()}
在这种情况下,请在onMouseDown
事件上调用event.preventDefault()
。 onMouseDown
默认会触发 blur 事件, preventDefault
时不会触发。 然后, onClick
将有机会被调用。 模糊事件仍然会发生,仅在onClick
之后。
您可以将<input>
的list属性与<datalist>
一起使用,而不是使用<ul>
。
希望这适合你的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.