
做搜索框的历史记录时遇到的问题
在构建搜索框的历史记录时,您可能遇到了以下问题:
解决方案:
问题一:
问题二:
更好的方法:
摒弃对失焦事件的依赖,而是使用以下方法:
示例代码(react):
import React, { useRef, useState, useEffect } from 'react';
const options = [
{ id: 1, name: '1' },
{ id: 2, name: '2' },
];
const App = () => {
const containerRef = useRef(null);
const [visible, setVisible] = useState(false);
useEffect(() => {
const onClickOutside = (event) => {
if (
containerRef.current &&
!containerRef.current.contains(event.target)
) {
setVisible(false);
}
};
document.addEventListener('mousedown', onClickOutside);
return () => {
document.removeEventListener('mousedown', onClickOutside);
};
}, [containerRef]);
const onFocus = () => {
console.log('onFocus');
setVisible(true);
};
const onClick = () => {
// 手动关闭历史记录,不受失焦事件的影响
setVisible(false);
};
return (
<div ref={containerRef}>
<input type="text" onFocus={onFocus} />
<button onClick={() => setVisible(false)}>clean</button>
<ul style={{ display: visible ? 'block' : 'none' }}>
{options.map((item) => (
<li className="item" onClick={onClick} key={item.id}>
{item.name}
</li>
))}
</ul>
</div>
);
};
export default App;通过采用这些解决方案,您可以在构建搜索框历史记录时避免上述问题,并实现更流畅的用户体验。
以上就是如何解决构建搜索框历史记录时遇到的失焦问题?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号