asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验)

yizhihongxing

下面是详细讲解“asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验)”的完整攻略。

第一步:引入jQuery和jQuery UI库

首先,我们需要在html页面中引入jQuery和jQuery UI库。这可以通过在head标签内添加如下代码来实现:

<head>
  <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
</head>

第二步:添加搜索框和结果显示区域

在html页面中添加一个搜索框和一个结果显示区域,可以通过如下代码实现:

<div>
  <input type="text" id="search">
  <ul id="search-results"></ul>
</div>

第三步:编写jQuery.AutoComplete代码

接下来,我们需要编写jQuery.AutoComplete的代码。为了改进键盘上下选择体验,我们需要对原有的up、down键的响应进行改写。具体代码如下:

$(function() {
  $('#search').autocomplete({
    minLength: 1,
    source: function(request, response) {
      $.ajax({
        url: '/search',
        type: 'POST',
        dataType: 'json',
        data: { search: $('#search').val() },
        success: function(data) {
          response(data);
        }
      });
    },
    select: function (event, ui) {
      $('#search-results li').removeClass('ui-state-focus');
      $('#search-results li a').removeClass('ui-state-hover');
      var val = ui.item.value.split(' ')[0];
      $('#search').val(val);
    }
  })
  .autocomplete('instance')._renderItem = function(ul, item) {
    return $('<li>')
      .attr('data-value', item.value)
      .addClass('ui-menu-item')
      .append('<a>' + item.label + '</a>')
      .appendTo('#search-results');
  };

  $('#search-results').on('mouseover', 'li', function() {
    $(this).addClass('ui-state-focus');
    $(this).children('a').addClass('ui-state-hover');
  });

  $('#search-results').on('mouseout', 'li', function() {
    $(this).removeClass('ui-state-focus');
    $(this).children('a').removeClass('ui-state-hover');
  });

  $('#search-results').on('click', 'li', function(e) {
    $('#search-results li').removeClass('ui-state-focus');
    $('#search-results li a').removeClass('ui-state-hover');
  }); 

  $('#search-results').on('keydown', function(e) {
    var current = $('#search-results li.ui-state-focus');
    if (e.which === 38) { // up arrow
      if (current.length === 0) {
        $('#search-results li:last-child').addClass('ui-state-focus');
        $('#search-results li:last-child a').addClass('ui-state-hover');
      } else {
        var prev = current.prev();
        if (prev.length === 0) {
          $('#search-results li:last-child').addClass('ui-state-focus');
          $('#search-results li:last-child a').addClass('ui-state-hover');
        } else {
          current.removeClass('ui-state-focus');
          current.children('a').removeClass('ui-state-hover');
          prev.addClass('ui-state-focus');
          prev.children('a').addClass('ui-state-hover');
        }
      }
      e.preventDefault();
    } else if (e.which === 40) { // down arrow
      if (current.length === 0) {
        $('#search-results li:first-child').addClass('ui-state-focus');
        $('#search-results li:first-child a').addClass('ui-state-hover');
      } else {
        var next = current.next();
        if (next.length === 0) {
          $('#search-results li:first-child').addClass('ui-state-focus');
          $('#search-results li:first-child a').addClass('ui-state-hover');
        } else {
          current.removeClass('ui-state-focus');
          current.children('a').removeClass('ui-state-hover');
          next.addClass('ui-state-focus');
          next.children('a').addClass('ui-state-hover');
        }
      }
      e.preventDefault();
    }
  });
});

其中,minLength表示在输入多少字符后开始自动完成,source表示获取自动完成列表的数据源,select表示在选中某个结果时的行为。

示例1:获取自动完成列表数据

在上面的代码中,我们使用了/search作为获取自动完成列表数据的接口,下面是一个简单的示例实现:

[HttpPost]
public IActionResult Search(string search)
{
  var products = new List<Product>
  {
    new Product { Name = "iPhone", Price = 699 },
    new Product { Name = "Samsung Galaxy", Price = 499 },
    new Product { Name = "Google Pixel", Price = 399 },
    new Product { Name = "Microsoft Surface", Price = 899 }
  };

  var result = new List<dynamic>();
  foreach (var p in products)
  {
    if (p.Name.Contains(search))
    {
      result.Add(new { value = p.Name + " - " + p.Price, label = p.Name });
    }
  }

  return Json(result);
}

这个示例中,我们假设要搜索的对象是商品,通过一个简单的Product类的集合实现了获取商品列表的功能。在实际应用中,我们可以根据实际需要,调用后台接口获取自动完成列表数据。

示例2:改进键盘上下选择体验

在上面的jQuery.AutoComplete代码中,我们对键盘上下键的响应进行了改写,实现了更好的键盘操作体验。下面是一个简单的示例实现:

.ui-state-focus {
  background-color: #ddf;
  cursor: default;
}
.ui-state-hover {
  background-color: #fc6;
  cursor: default;
}

在这个示例中,我们对.ui-state-focus和.ui-state-hover两个类进行了样式定制,实现了更好的交互体验。

至此,我们已经完成了“asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验)”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验) - Python技术站

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

相关文章

  • 详解Go-JWT-RESTful身份认证教程

    详解Go-JWT-RESTful身份认证教程 介绍 本文将详细介绍如何使用Go语言实现一套基于JWT(JSON Web Token)的RESTful身份认证系统。RESTful是一种基于HTTP协议、符合REST原则的接口设计风格,使用JWT进行身份认证和授权可以轻松实现API的状态无关性和安全性。 实现步骤 生成JWT Token 生成JWT Token是…

    JavaScript 2023年6月11日
    00
  • JS多物体实现缓冲运动效果示例

    JS多物体实现缓冲运动效果示例是一个相对复杂的动画效果,需要涉及到多个物体的运动,同时需要使用缓冲运动算法,可以通过以下步骤进行实现: 1. HTML结构 首先需要在HTML中添加每个物体的标签,可以使用div标签,为每个标签添加一个id用于在JS中操作。 <div id="box1"></div> <div…

    JavaScript 2023年6月11日
    00
  • JS时间特效最常用的三款

    JS时间特效是网站开发中经常使用的技术,比如动态时间显示、倒计时等,下面介绍三款JS时间特效,分别是CountUp.js、Moment.js和Timeago.js。 CountUp.js CountUp.js是一个小型的、跨平台JavaScript库,用于轻松地实现计数器动画。步骤如下: 首先,从GitHub仓库中下载 CountUp.js 库,并将其添加到…

    JavaScript 2023年5月27日
    00
  • javascript基础的动画教程,直观易懂

    Javascript基础动画教程 在本文中,我们将详细介绍Javascript动画的基础知识。这些知识将帮助你创建直观易懂的动画效果,使你的网页更加生动活泼。 动画基础知识 在Javascript动画中,我们通常使用以下基础知识: 1. 定时器 定时器在Javascript动画中起到很重要的作用。使用定时器,我们可以按照预定的时间间隔执行特定的代码。一般来说…

    JavaScript 2023年6月10日
    00
  • JS数学函数Exp使用说明

    JS数学函数Exp使用说明 简介 Exp()函数是JavaScript中的一个数学函数,也称为指数函数或自然对数函数。它的主要作用是计算以自然常数e为底数的指数函数。 在数学上,自然常数e是一个重要的常数,它的值是约等于2.71828的无限不循环小数。指数函数y=e^x是一个与其它常见数学函数如幂函数、指数函数和对数函数等同样重要的函数。 语法 Math.e…

    JavaScript 2023年5月28日
    00
  • JavaScript中从setTimeout与setInterval到AJAX异步

    JavaScript中从setTimeout与setInterval到AJAX异步 setTimeout与setInterval setTimeout setTimeout是JavaScript中的一个定时器函数,它接受2个参数:一个函数和一个时间(单位为毫秒)。当函数被发送到浏览器的事件队列时,它会在指定的时间之后执行。 setTimeout(functi…

    JavaScript 2023年6月11日
    00
  • JS实现数组去重方法总结(六种方法)

    这里是JS实现数组去重方法总结(六种方法)的完整攻略。 一、方法一:利用ES6 Set特性去重 利用ES6新特性Set(集合)的特性,可以很方便地去重。 实现方法如下: let arr = [1, 2, 3, 4, 1]; let newArr = […new Set(arr)]; console.log(newArr); // [1, 2, 3, 4]…

    JavaScript 2023年5月27日
    00
  • JavaScript实现form表单的多文件上传

    使用 JavaScript 实现 form 表单的多文件上传,需要按照以下步骤进行: HTML 部分 在 HTML 中添加表单和 input 元素,其中 input 的 type 属性为 file,multiple 属性为 true,表示支持选择多个文件。例如: <form id="form_upload" method=&quot…

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