You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现无匹配地址时自动关闭AutoSuggestion Box

解决地址自动补全无匹配时空白建议框不关闭的问题

你的问题核心是:当API返回无匹配地址时,没有将自定义建议框切换回隐藏状态,加上keyup事件里直接强制激活了建议框,导致空白框一直显示。以下是具体修复方案:

1. 修复sendLookupRequest函数逻辑

当前代码只处理了有建议结果的情况,完全忽略了无结果的场景。需要在请求返回后,根据data.suggestions的长度判断是否显示建议框:

async function sendLookupRequest(searchValue) {
  // 补充你之前省略的参数构建逻辑(比如API密钥等)
  const params = new URLSearchParams({
    key: "你的Smarty API密钥",
    prefix: searchValue,
    // 其他必要参数,比如country等
  });

  const request = await fetch(
    `https://us-autocomplete-pro.api.smarty.com/lookup?${params}`
  );
  const data = await request.json();

  if (data?.suggestions?.length > 0) {
    // 有匹配结果:渲染建议并显示框
    formatSuggestions(data.suggestions);
    suggestionElement.classList.remove("inactive");
    suggestionElement.classList.add("active");
  } else {
    // 无匹配结果:清空内容并隐藏框
    suggestionElement.innerHTML = "";
    suggestionElement.classList.remove("active");
    suggestionElement.classList.add("inactive");
  }
}

2. 调整keyup事件的激活逻辑

原来的keyup事件里,不管后续API返回什么结果,先把建议框设为active,这会导致无结果时框依然保持激活状态。修改后去掉这部分强制激活的代码,交给请求返回后处理:

addressElement.addEventListener("keyup", (e) => {
  const searchValue = e.target.value.trim(); // 处理输入空格的情况
  suggestionElement.innerHTML = "";

  if (!searchValue) {
    suggestionElement.classList.remove("active");
    suggestionElement.classList.add("inactive");
    return;
  }

  // 不再直接激活建议框,由API请求结果决定显示状态
  sendLookupRequest(searchValue);
});

关于autocomplete="off"的说明

这个属性是用来禁用浏览器原生自动填充的,和你自定义的建议框无关,所以它无效不影响当前问题的解决,不用再纠结这个属性。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:11:08