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

搜索结果返回后如何在搜索框中显示已搜索内容

搜索后保留搜索框内容的实现方案

不管是原生前端还是框架开发,核心思路都是让搜索框的取值始终和用户输入的搜索关键词绑定,以下是不同场景下的具体实现:

原生HTML + JavaScript实现

方案1:GET请求后从URL参数回显(推荐)

这种方式支持刷新页面、分享链接后仍保留搜索内容,体验更完整:

<form id="searchForm" action="/search" method="GET">
  <input type="text" id="searchInput" name="q" placeholder="输入关键词搜索">
  <button type="submit">搜索</button>
</form>

<script>
// 页面加载时读取URL中的搜索参数,回显到输入框
window.addEventListener('load', () => {
  const urlParams = new URLSearchParams(window.location.search);
  const searchWord = urlParams.get('q');
  if (searchWord) {
    document.getElementById('searchInput').value = searchWord;
  }
});
</script>

方案2:异步搜索(AJAX)时直接保留

如果用AJAX异步加载结果,只要不主动清空输入框,内容会自动保留:

<input type="text" id="searchInput" placeholder="输入关键词搜索">
<button id="searchBtn">搜索</button>
<div id="resultContainer"></div>

<script>
document.getElementById('searchBtn').addEventListener('click', async () => {
  const query = document.getElementById('searchInput').value.trim();
  if (!query) return;
  
  // 发起异步请求
  const res = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
  const data = await res.json();
  
  // 渲染结果,输入框内容不会被清空
  document.getElementById('resultContainer').innerHTML = data.map(item => `<p>${item.title}</p>`).join('');
});
</script>

Vue框架实现

利用Vue的双向绑定特性,把搜索词存在响应式变量中,搜索后不重置变量即可:

<template>
  <div>
    <input 
      v-model="searchQuery" 
      type="text" 
      placeholder="输入关键词搜索"
    >
    <button @click="doSearch">搜索</button>
    <div v-for="item in results" :key="item.id">{{ item.content }}</div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { useRoute } from 'vue-router';

const searchQuery = ref('');
const results = ref([]);
const route = useRoute();

// 路由跳转后从URL参数回显
onMounted(() => {
  const query = route.query.q;
  if (query) {
    searchQuery.value = query;
    doSearch();
  }
});

const doSearch = async () => {
  if (!searchQuery.value.trim()) return;
  const res = await fetch(`/api/search?q=${encodeURIComponent(searchQuery.value)}`);
  results.value = await res.json();
};
</script>

React框架实现

通过状态管理保存搜索词,结合路由参数实现回显:

import { useState, useEffect } from 'react';
import { useSearchParams } from 'react-router-dom';

function Search() {
  const [searchQuery, setSearchQuery] = useState('');
  const [results, setResults] = useState([]);
  const [searchParams, setSearchParams] = useSearchParams();

  // 从URL参数读取搜索词并回显
  useEffect(() => {
    const query = searchParams.get('q');
    if (query) {
      setSearchQuery(query);
      fetchResults(query);
    }
  }, [searchParams]);

  const fetchResults = async (query = searchQuery) => {
    if (!query.trim()) return;
    // 更新URL参数
    setSearchParams({ q: query });
    const res = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
    setResults(await res.json());
  };

  return (
    <div>
      <input
        type="text"
        value={searchQuery}
        onChange={(e) => setSearchQuery(e.target.value)}
        placeholder="输入关键词搜索"
      />
      <button onClick={() => fetchResults()}>搜索</button>
      {results.map(item => <p key={item.id}>{item.content}</p>)}
    </div>
  );
}

export default Search;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:23:33