- 搜索框历史记录问题
解决点击历史记录导致input失焦的问题,可以通过阻止事件冒泡来实现。当点击历史记录时,先阻止点击事件的冒泡,然后再执行聚焦input的操作,这样可以确保点击历史记录不会触发input的失焦事件。
// 假设historyList是历史记录的数组
// handleClick是处理历史记录点击的方法
historyList.forEach((item, index) => {
const div = document.createElement('div');
div.textContent = item;
div.addEventListener('click', (e) => {
e.stopPropagation(); // 阻止事件冒泡
handleClick(item); // 处理点击事件
});
});
- 清除图标问题
对于清除图标导致搜索框自动失焦的问题,可以通过在清除图标上添加一个标志位,用来判断是否是用户点击了清除图标。当用户点击清除图标时,先修改标志位,然后在失焦事件中检查该标志位,如果标志位为true,则不触发失焦操作。
// 假设clearIcon是清除图标的DOM节点
// isClearIconClicked是标志位,初始为false
clearIcon.addEventListener('click', () => {
isClearIconClicked = true; // 修改标志位为true
input.value = ''; // 清空输入框
});
input.addEventListener('blur', () => {
if (isClearIconClicked) { // 检查是否是用户点击了清除图标
isClearIconClicked = false; // 修改标志位为false
} else {
// 如果不是用户点击了清除图标,正常处理失焦事件
}
});
这样就可以解决清除图标导致搜索框自动失焦的问题。同时,通过在历史记录上添加事件监听器并阻止事件冒泡,也可以解决点击历史记录导致input失焦的问题。
更新:
问题一:
加一个容器元素把
input
和ul
包起来,ref
要加到容器上。问题二:
在
clean
元素的点击事件中控制ul
的显示。我的做法是,不要依赖
blur
事件。代码很简单,有不明白的可以问我。
vue的版本