.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日

相关文章

  • JS创建对象的写法示例

    以下是关于JS创建对象的写法示例的完整攻略: 什么是JS对象 JS中的对象指的是一组键值对的集合。它们通过点号或中括号访问。 1.对象字面量创建对象 // 通过字面量的方式创建一个对象 const obj = { name: "Lena", age: 25, gender: "female", sayHi: funct…

    JavaScript 2023年5月27日
    00
  • 跟我学习javascript的闭包

    跟我学习JavaScript的闭包攻略 什么是闭包? 在JavaScript中,闭包是指一个函数可以访问并操作定义在其它函数内部的变量。 具体来说,当一个函数返回另一个函数时,返回的函数可以访问其父级函数的变量,这个返回的函数就是一个闭包。 为什么需要使用闭包? 使用闭包有以下几个好处: 私有化变量: 为变量提供私有化处理,保护不被外部所访问,实现数据的安全…

    JavaScript 2023年5月27日
    00
  • javascript 函数限制调用代码

    当我们编写 JavaScript 代码时,为了代码安全和可维护性,限制函数外部对函数内部代码的访问是十分重要的。在以下代码片段中,函数内部的数据变量可以被外部直接访问和修改,这会导致安全漏洞和代码不易维护。 let data = { name: ‘John’, age: 35 } function fetchData() { return data; } c…

    JavaScript 2023年5月27日
    00
  • javascript:void(0)点击登录没反应怎么解决

    针对“javascript:void(0)点击登录没反应怎么解决”的问题,我提供以下攻略: 1. 了解 javascript:void(0) 首先,我们先来了解一下javascript:void(0)是什么。这个字符串一般会出现在a标签的href属性中,它的作用是停止链接跳转。 实际上,它等同于JavaScript表达式void(0),void操作符会执行表…

    JavaScript 2023年6月11日
    00
  • Javascript Math exp() 方法

    JavaScript中的Math.exp()方法用于返回自然数e的x次幂,其中x是传递给该方法的参数。以下是关于Math.exp()方法的完整攻略,包括两个示例。 JavaScript Math对象的exp()方法 JavaScript Math对象中的exp()方法用于返回自然数e的x次幂,其中x是传递给该方法的参数。 下面是exp()方法的语法: Mat…

    JavaScript 2023年5月11日
    00
  • 详解js中Json的语法与格式

    下面是详解“详解js中Json的语法与格式”的完整攻略。 什么是 JSON JSON(Javascript Object Notation)是一种轻量级的数据交换格式,在前端开发中广泛应用。它基于JavaScript对象语法,但是可以被用于保存和交换任何类型的数据。 JSON 的语法 JSON的语法非常简洁,只有两种结构:对象(Object)和数组(Arra…

    JavaScript 2023年5月27日
    00
  • js 与或运算符 || && 妙用

    下面是关于“JS 与或运算符 || && 妙用”的完整攻略,包含两个示例说明: 一、JS 与或运算符概述 在JS中,&&和||是常用的逻辑运算符,它们可以将多个条件判断合并在一起。在编写条件判断语句时,通过巧妙地使用逻辑运算符,可以让代码更加简洁、易懂,提高开发效率。 1.1 逻辑与运算符(&&) 逻辑与运算符…

    JavaScript 2023年5月18日
    00
  • JavaScript学习笔记之JS事件对象

    JavaScript学习笔记之JS事件对象 什么是JS事件对象 JavaScript事件对象(Event Object)是在事件被触发时由浏览器自动创建的对象,它包含了与事件相关的所有信息,我们可以通过JS事件对象来获取一些有用的信息,如事件类型、触发事件的元素、鼠标的位置等。 JS事件对象的属性 以下是JS事件对象常用的属性: type:事件类型,如”cl…

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