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

下面是详细的“.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日

相关文章

  • Element中table组件按照属性执行合并操作详解

    Element是一个基于Vue.js的组件库,内置了丰富的UI组件,其中包括Table组件。Table组件可以用于展示数据表格,提供了多种功能和样式配置选项,具有丰富的使用场景。在Table组件中,可以通过设置属性来控制表格的合并操作,使得数据呈现更加清晰明了。 本文详细讲解了Element中table组件按照属性执行合并操作的攻略,包括基本的属性设置、跨行…

    JavaScript 2023年6月10日
    00
  • 如何利用javascript接收json信息并进行处理

    我们来讲一下如何利用JavaScript接收JSON信息并进行处理。 1. 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于阅读和编写的方式在人类和计算机之间传输数据。JSON是基于JavaScript的一个子集,因此,当我们使用JavaScript处理JSON数据时,处理起来非常高效。 …

    JavaScript 2023年5月27日
    00
  • JS基于FileSystemObject创建一个指定路径的TXT文本文件

    下面给您详细讲解基于FileSystemObject创建指定路径的TXT文本文件的完整攻略。 步骤一:创建FileSystemObject对象 使用JavaScript创建FileSystemObject对象,可以使用以下代码: var fso = new ActiveXObject("Scripting.FileSystemObject&quot…

    JavaScript 2023年5月27日
    00
  • JavaScript 完成注册页面表单校验的实例

    下面是 JavaScript 完成注册页面表单校验的实例的完整攻略: 一、概述 在网站的注册页面中,为了防止用户输入错误或不符合规范的信息,通常需要进行表单校验。JavaScript 能够很好地完成这个任务。 二、前置知识 HTML 基础知识 JavaScript 基础知识 三、实现过程 首先,在 HTML 中编写注册页面表单。 <form> &…

    JavaScript 2023年6月10日
    00
  • 详细解密jsonp跨域请求

    关于“详细解密jsonp跨域请求”的攻略,包含了如下几个步骤: 1. 什么是JSONP跨域请求 JSONP(JSON with Padding)是一种解决跨域资源共享的方法。它通过在页面的头部加上一个脚本(script)标签,并通过这个标签的src属性向另一个域名发出请求,另一个域名在返回的响应中放入一些JavaScript代码。返回的JavaScript代…

    JavaScript 2023年5月27日
    00
  • javascript 注释代码的几种方法总结

    JavaScript 注释代码是为了在代码中加入一些标注或解释,方便程序员或其他人员阅读代码。注释代码在开发过程中起到了非常重要的作用。本文将详细讲解 JavaScript 注释代码的几种方法总结。 单行注释 使用单行注释的方法在注释行前加上双斜杠 “//”。单行注释只会注释单独一行代码。例如: var name = "张三"; // 定…

    JavaScript 2023年5月27日
    00
  • 分享一则javascript 调试技巧

    当我们进行JavaScript开发时,难免会遇到各种错误和调试问题。为了能够高效地解决问题,这里分享一些实用的调试技巧。 1. 使用console.log()输出调试信息 console.log()是我们常用的调试工具之一,它可以在控制台输出任何类型的数据,方便我们观察和分析。在开发中,可以将一些关键数据打印出来,这样可以直观地发现数据的变化和问题所在,例如…

    JavaScript 2023年5月18日
    00
  • javascript:;与javascript:void(0)使用介绍

    当我们在HTML中使用”href”属性来定义一个链接时,有时会使用”javascript:”或”javascript:void(0)”作为链接的href值。这两个值虽然都可以用来防止页面跳转,但它们的作用是有所不同的。 “javascript:;” “javascript:;”这个值通常用来防止a标签产生默认跳转行为,因为当a标签的href属性的值为空时,点…

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