模擬百度搜索下拉:點擊 `
// 輸入框 blur 事件
$input.on('blur', function() {
// 關鍵:給予 click 事件足夠時間觸發
setTimeout(() => {
$dropdown.hide();
}, 200); // 200ms 經驗值,足夠覆蓋用戶點擊延遲
});
// 下拉選項 click 事件
$dropdown.on('click', 'li', function() {
$input.val($(this).text()).focus(); // 填充並保持焦點,阻止 blur
// 業務邏輯...
});
瀏覽器事件循環中,`mousedown` → `blur` → `click`。`setTimeout` 將隱藏操作推入下一個宏任務,使 `click` 處理器能在同一輪事件循環內完成填充並調用 `focus()` 重新獲取焦點,從而取消後續的 `blur` 隱藏邏輯。
推薦使用 `setTimeout` 方案,簡單兼容性好。