.NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路

yizhihongxing

下面是详细的“.NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路”的攻略:

思路概述

  1. 将百度搜索框封装入input标签内,并加上id="searchInput"属性,这样方便后续的DOM操作。
  2. 使用JavaScript监听输入框内容(keyup事件),当用户输入触发事件后,发送AJAX请求给百度服务器,获取搜索结果。
  3. 接收到结果后,将结果显示到页面上的下拉提示框中。下拉提示框使用CSS设置定位和样式。
  4. 当用户点击搜索关键词或在下拉提示框上按上下键时,将关键词填入输入框并提交搜索表单。

代码实现

HTML结构

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>百度搜索</title>
    <style>
        .result-panel {
            position: absolute;
            background-color: #fff;
            border: 1px solid #ccc;
            max-height: 200px;
            overflow-y: auto;
            z-index: 999;
            width: 350px;
        }

        .result-item {
            padding: 5px 10px;
            cursor: pointer;
        }

        .result-item:hover {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <form action='http://www.baidu.com/s' target="_blank" method="get">
        <input type="text" name="wd" id="searchInput" autocomplete="off" />
        <input type="submit" value="搜索" />
    </form>
    <div id="searchResult"></div>
    <script src="js/search.js"></script>
</body>
</html>

JavaScript代码

// 获取文档中的input和div元素
const input = document.getElementById('searchInput')
const resultPanel = document.getElementById('searchResult')

// 监听input输入事件
input.addEventListener('keyup', () => {
  // 延迟一段时间再去搜索,避免频繁搜索
  setTimeout(() => {
    const keyword = input.value.trim()
    if (keyword === '') {
      // 如果输入框没有内容,则隐藏下拉提示框
      resultPanel.innerHTML = ''
      resultPanel.style.display = 'none'
      return
    }
    // 发送AJAX请求给百度服务器,获取搜索结果
    const xhr = new XMLHttpRequest()
    xhr.open('GET', 'https://www.baidu.com/sugrec?prod=pc&from=pc_web&wd=' + keyword)
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        try {
          if (xhr.status === 200) {
            const response = JSON.parse(xhr.responseText)
            const results = response.g
            if (results.length === 0) {
              resultPanel.innerHTML = ''
              resultPanel.style.display = 'none'
              return
            }
            // 构建下拉提示框中的搜索结果
            let html = ''
            results.forEach(item => {
              html += `<div class="result-item" data-title="${item.q}">${item.q}</div>`
            })
            // 在页面中显示下拉提示框,并将搜索结果填充进去
            resultPanel.innerHTML = html
            resultPanel.style.display = 'block'
          }
        } catch (error) {
          // JSON解析失败或发生其它错误
          resultPanel.innerHTML = ''
          resultPanel.style.display = 'none'
        }
      }
    }
    xhr.send()
  }, 300)
})

// 监听下拉提示框中的鼠标单击事件
resultPanel.addEventListener('click', event => {
  const target = event.target
  if (target.classList.contains('result-item')) {
    // 将单击的搜索关键词填入HTML input元素中
    input.value = target.dataset.title
    resultPanel.innerHTML = ''
    resultPanel.style.display = 'none'
    // 提交搜索表单
    input.form.submit()
  }
})

// 监听下拉提示框中的键盘上下键事件
resultPanel.addEventListener('keydown', event => {
  const target = event.target
  if (target.classList.contains('result-item')) {
    if (event.key === 'ArrowDown') {
      const next = target.nextElementSibling
      if (next) {
        next.focus() // 焦点移动到下一个
      }
    } else if (event.key === 'ArrowUp') {
      const prev = target.previousElementSibling
      if (prev) {
        prev.focus() // 焦点移动到上一个
      }
    }
  }
})

以上代码实现了一个简单的百度搜索下拉提示功能,输入框会通过AJAX请求获取搜索建议,展示在下拉面板中。在展示面板中的建议上按下Enter键直接提交查询表单,按下键盘上下键从展示面板中的建议中以此类推选择要搜索的内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS前端错误监控捕获以及上报方法详解

    JS前端错误监控捕获以及上报方法详解 简介 在前端开发过程中,我们经常会遇到各种各样的问题,其中 JS 错误显得尤为常见。在出现问题时我们需要将其排查并解决,但有时问题的实际情况在我们面前并不呈现,而是隐蔽的。这时需要我们有一种错误监控的方法,即在 JS 代码中添加错误监控功能,可以捕获所有的 JS 错误,并及时向后端上报,以便我们及时处理问题。 实现过程 …

    JavaScript 2023年5月18日
    00
  • JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结

    为了解决JavaScript在IE和Firefox(火狐)的不兼容问题,我们需要掌握以下知识点: 1. DOM(文档对象模型)的差异 IE和Firefox对DOM标准的解析有所不同,导致同样的JavaScript代码在不同浏览器中执行效果会有所不同。我们可以采用以下方法解决这个问题: (1)使用ID来获取元素 在IE中,我们可以通过document.all[…

    JavaScript 2023年5月18日
    00
  • js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍

    JS中页面的重新加载 在JS中,我们经常需要在不刷新整个页面的情况下重新加载部分内容,下面将介绍如何在JS中实现当前页面和上级页面的重新加载。 当前页面的重新加载 要实现当前页面的重新加载,可以使用如下代码: location.reload(); 这样,当前页面的内容就会被重新加载,相当于用户点击了浏览器的刷新按钮。 上级页面的重新加载 要实现上级页面的重新…

    JavaScript 2023年6月11日
    00
  • 浅谈setTimeout 与 setInterval

    浅谈setTimeout与setInterval 简介 在JavaScript中,setTimeout与setInterval是常用的计时器函数。它们可以用来定时执行函数,控制代码的执行流程。本文将从以下几个方面对setTimeout与setInterval进行详细讲解。 setTimeout的用法及注意事项 setInterval的用法及注意事项 setT…

    JavaScript 2023年6月11日
    00
  • JavaScript实现可终止轮询请求的方法

    我将为您详细讲解“JavaScript实现可终止轮询请求的方法”的完整攻略。 1. 什么是轮询请求 轮询请求是指客户端通过一定的时间间隔周期性地向服务器发送请求,以获取最新的数据或状态。一般来说,客户端需要不断向服务器发送请求,直到服务端返回需要的最新信息。 2. 实现可终止轮询请求的方法 2.1 XMLHttpRequest XMLHttpRequest是…

    JavaScript 2023年6月11日
    00
  • js绘制购物车抛物线动画

    下面我将详细讲解一下如何使用JavaScript绘制购物车抛物线动画的完整步骤。 步骤一:创建抛物线数据 为了实现抛物线动画,我们需要先创建一些抛物线的数据。如下代码所示: function getBesselPoint(x1, y1, x2, y2, x3, y3, t) { var cx = 3 * (x2 – x1), bx = 3 * (x3 – x…

    JavaScript 2023年6月10日
    00
  • js中split函数的使用方法说明

    下面是“js中split函数的使用方法说明”的完整攻略。 什么是split函数 split函数是JavaScript中的一个字符串方法,主要用于将一个字符串根据指定的分隔符,切割成一个字符串数组。 其语法如下: string.split(separator, limit); 其中,separator代表指定的分隔符,可以是一个字符串或一个正则表达式;limi…

    JavaScript 2023年5月27日
    00
  • Javascript实现秒表倒计时功能

    下面是“Javascript实现秒表倒计时功能”的完整攻略。 1. 准备工作 在开始编写代码实现倒计时功能之前,我们需要先准备一些基本的内容。具体包括以下几点: 1.1 确定计时的起点和终点 倒计时功能要想实现,我们需要确定计时的起点和终点。你可以自己设定一个时间,如5分钟(300秒),也可以通过用户输入动态获取倒计时的时间。 1.2 设计页面元素 在页面上…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部