当前位置: 首页 > 编程日记 > 正文

Autocomplete 自动补全(Webform实战篇)

开篇语

因为项目中需要用到一个自动补全的功能,功能描述:

需求一:新增收件人的时候,自动下拉显示出数据库中所有的收件人信息(显示的信息包括:姓名-收件地址-联系方式)

需求二:选中一个值得时候,分别赋值到对应文本框(收件人输入框中赋值 姓名,联系方式输入框中赋值 手机号,收件地址输入框中赋值 地址)

解决需求一(因本人比较懒,所以直接选用了一个比较方便的插件:Autocomplete [参考学习地址:http://www.runoob.com/jqueryui/jqueryui-use.html])

实现步骤

步骤① 去官网下载对应版本的包,然后在项目中添加这两个引用即可

步骤② 新建一个一般处理程序

步骤三③ 写查询及转换方法

1 在接口里面新增一个查询方法(接口只定义规则,不做具体实现)

2 继承接口并实现查询方法(因为功能需要,这里查询直接做了拼接,查询出来就是“收件人-地址-联系方式”)

3  方法里面调用这个方法进行json数据转换(通用方法可以直接使用)

 1 // var name = context.Request["name"];
 2             // 查询的参数名称默认为term 
 3             string query = context.Request.QueryString["term"];
 4             context.Response.ContentType = "text/javascript"; 
 5             DataTable sendInfoManage = CMSModelManager.SendInfoManageDAO.Method(query);//调用查询方法,返回一个DataTable
 6             //反序列化
 7             System.Web.Script.Serialization.JavaScriptSerializer serailizer = new System.Web.Script.Serialization.JavaScriptSerializer();
 8             List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
 9             Dictionary<string, object> row;
10             foreach (DataRow dr in sendInfoManage.Rows)
11             {
12                 row = new Dictionary<string, object>();
13                 foreach (DataColumn col in sendInfoManage.Columns)
14                 {
15                     row.Add(col.ColumnName, dr[col]);
16                 }
17                 rows.Add(row);
18             }
19 
20             string s= serailizer.Serialize(rows);
21             context.Response.Write(s);
View Code

步骤④ 页面接收返回数据和处理返回数据

 1  $(function() {
 2             var name = $("#ctl00_contentPlace_txtSender").val().trim();
 3             $("#ctl00_contentPlace_txtAddressee").autocomplete({
 4                 source: function(request, response) {
 5                     $.ajax({
 6                         url: "Handler.ashx",//请求地址
 7                         type: "post",//请求类型
 8                         data: { "name": name },//参数
 9                         success: function(data) {
10                             //console.log(data);  
11                             response($.map(eval(data), function(item) { //使用该插件必须要用eval()进行处理
12                                 //console.log(item);
13                                 return {
14                                     value: item.show,//赋值到控件上
15                                     result: item.show
16                                 }
17                             }));
18                        
19                         },
20                         error: function(xhr) {
21                             console.log("发生错误");
22                         }
23                     });
24                      
25                 },
26                    
27             });
28         });
29   
View Code

下图对应上图的数据呈现过程

页面效果

补充:这个插件默认没有滚动条,需要手动添加样式(最大高度可以自行设定)

 1   <style type="text/css">
 2   .ui-autocomplete {
 3     max-height: 250px;
 4     overflow-y: auto;
 5     /* 防止水平滚动条 */
 6     overflow-x: hidden;
 7   }
 8   /* IE 6 不支持 max-height
 9    * 我们使用 height 代替,但是这会强制菜单总是显示为那个高度
10    */
11   * html .ui-autocomplete {
12     height: 250px;
13   }
14   </style>

解决需求二:特意查了下Autocomplete返回值处理情况,最终选用select做处理,最后请求的ajax改为:

 1   var showName = null;
 2     $(function() {
 3     $("#ctl00_contentPlace_txtAddressee").autocomplete({
 4             source: function(request, response) {
 5                 $.ajax({
 6                     url: "Handler.ashx", //请求地址
 7                     type: "post", //请求类型
 8                     data: { "name": $("#ctl00_contentPlace_txtAddressee").val().trim(), "look": $("#ctl00_contentPlace_txtSendCode").val().trim() }, //参数
 9                     success: function(data) {
10                         //console.log(data);  
11                         response($.map(eval(data), function(item) { //使用该插件必须要用eval()进行处理
12                             //console.log(item);
13                             return {
14                                 value: item.show, //赋值到控件上
15                                 result: item.show
16                             }
17                         }));
18 
19                     },
20                     error: function(xhr) {
21                         console.log("发生错误");
22                     }
23                 });
24             },
25             select: function(event, ui) {
26                 var li = (ui.item.label).split("-");
27                 $("#ctl00_contentPlace_txtAddressee").val(li[0]);
28                 console.log(li[0]);
29                 showName = li[0];
30                 $("#ctl00_contentPlace_txtContactInfo").val(li[2]);
31                 $("#ctl00_contentPlace_txtMailingAddress").val(li[1]);
32                 showNames();//可以继续调用其他方法
33             }
34         });
35     });
36     function showNames() {
37         console.log(showName);
38         if (showName != null) {
39             $("#ctl00_contentPlace_txtAddressee").val("");
40             $("#ctl00_contentPlace_txtMailContent").val("测试数据");
41         }
42     }
View Code

效果展示:

选中前

选中后

天了噜,什么,竟然收件人赋值不上,找了半天原因(清空后赋值等等)。。。。。

还是没找到问题,不过因为项目急着测试,就想了个偷懒的办法,用延时再赋值的方式调了下,终于可以了

所以最终版的前台请求如下

 1   var showName = null;
 2     $(function() {
 3     $("#ctl00_contentPlace_txtAddressee").autocomplete({
 4             source: function(request, response) {
 5                 $.ajax({
 6                     url: "Handler.ashx", //请求地址
 7                     type: "post", //请求类型
 8                     data: { "name": $("#ctl00_contentPlace_txtAddressee").val().trim(), "look": $("#ctl00_contentPlace_txtSendCode").val().trim() }, //参数
 9                     success: function(data) {
10                         //console.log(data);  
11                         response($.map(eval(data), function(item) { //使用该插件必须要用eval()进行处理
12                             //console.log(item);
13                             return {
14                                 value: item.show, //赋值到控件上
15                                 result: item.show
16                             }
17                         }));
18                     },
19                     error: function(xhr) {
20                         console.log("发生错误");
21                     }
22                 });
23             },
24             select: function(event, ui) {
25                 var li = (ui.item.label).split("-");
26                 $("#ctl00_contentPlace_txtAddressee").val(li[0]);
27                 console.log(li[0]);
28                 showName = li[0];
29                 $("#ctl00_contentPlace_txtContactInfo").val(li[2]);
30                 $("#ctl00_contentPlace_txtMailingAddress").val(li[1]);
31                 showNames();//可以继续调用其他方法
32             }
33         });
34     });
35     function showNames() {
36        if (showName != null) {
37          setTimeout(function()
38          {
39              $("#ctl00_contentPlace_txtAddressee").val(showName);
40              
41          },100); 
42       }
43     };
View Code

最终效果

至此,自动补全已经完成并满足需求,Autocomplete非常灵活,本文只是做了简单阐述和讲解

对Autocomplete插件更多参数和方法说明,请查阅 http://www.runoob.com/jqueryui/api-autocomplete.html

转载于:https://www.cnblogs.com/zhangxiaoyong/p/5763432.html

相关文章:

前端开发基础7(Bootstrap框架)

Bootstrap介绍 Bootstrap是Twitter开源的基于HTML、CSS、JavaScript的前端框架。 它是为实现快速开发Web应用程序而设计的一套前端工具包。 它支持响应式布局&#xff0c;并且在V3版本之后坚持移动设备优先。 为什么要使用Bootstrap&#xff1f; 在Bootstrap出现之前&#xff1…

python自动化测试难不难_Python测试自动化好学还是Pythonweb开发好学?

还是测试吧。。。 用动态语言搞开发&#xff0c;项目大了根本没法维护&#xff0c;而且还会bug层出不穷&#xff0c;任谁也Hold不住。真想搞开发&#xff0c;要么玩Java&#xff0c;要么玩C#。 下面举个例子。 比如一个游戏项目&#xff0c;是这样的(伪代码)&#xff1a;角色 l…

以太坊智能合约开发第二篇:理解以太坊相关概念

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 很多人都说比特币是区块链1.0&#xff0c;以太坊是区块链2.0。在以太坊平台上&#xff0c;可以开发各种各样的去中心化应用&#xff0c;这些应用构成…

【python之旅】python的基础二

一、集合的操作 1、什么是集合&#xff1f; 集合是一个无序的&#xff0c;不重复的数据组合&#xff0c;它的主要作用如下&#xff1a; 去重&#xff1a;把一个列表变成集合&#xff0c;就自动去重关系测试&#xff1a;测试两组数据之前的交集&#xff0c;差集&#xff0c;并集…

hash 值重复_程序员:判断对象是否重复,不重写equals和hashcode不行吗?

前言大家都知道如果要判断一个对象是否相同&#xff0c;都要在对象实体中重写equals和hashcode方法&#xff0c;那你知道为什么重写这两个方法就能根据自己定义的规则实现相等比较了吗&#xff1f;今天带大家来了解一下equals和hashcode重写的实现。set是如何去重的&#xff1f…

LazyT 延迟加载

namespace ConsoleAppTest {class Program{static void Main(string[] args){Lazy<Student> student new Lazy<Student>();//默认未初始化Console.WriteLine(student);//在第一次使用时才实例化Console.WriteLine(student.Value);Console.ReadLine();}public clas…

如何编写一个可升级的智能合约

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 如何编写一个可升级的智能合约 区块链信任基础的数据不可修改的特性&#xff0c;让它传统应用程序有一个很大的不同的地方是一经发布于区块链上就…

用ILSpy查看Session.SessionID的生成算法

缘由 asp.net Session在InProc模式下&#xff0c;容易丢失&#xff0c;经常需要重新登录&#xff0c;且不支持分布式共享。   所以在研究Redis实现原生的Session,本来想用GUID作为key存入cookie&#xff0c;又在想能不能实现跟Session一样的id 实现 ILSpy 是一个开源的.NET反…

java 中 bean 的生命周期

java 中 bean 的生命周期 本篇中会对涉及到的知识点皆做出描述&#xff1a; 首先&#xff0c;我们先了解先虚拟机的类加载机制&#xff1a; 虚拟机把描述类的数据从Class 文件中加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接…

python简易版实例_Python3之简单搭建自带服务器的实例讲解

WEB开发&#xff0c;我们先从搭建一个简单的服务器开始&#xff0c;Python自带服务模块&#xff0c;且python3相比于python2有很大不同&#xff0c; 在Python2.6版本里&#xff0c;/usr/bin/lib/python2.6/ 目录下会有 BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.…

如何选择分布式系统(区块链)协议?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 如何选择分布式系统&#xff08;区块链&#xff09;协议? 在构建包分布式系统功能的应用程序时&#xff0c;《财富》500强企业和创始人经常问我们…

MySQL与IO

数据库作为存储系统&#xff0c;所有业务访问数据的操作都会转化为底层数据库系统的IO行为(缓存系统也可以当做是key-value的数据库),本文主要介绍访问mysql数据库的IO流程以及IO相关的参数。 一 MySQL 的文件 首先简单介绍一下MySQL的数据文件&#xff0c;MySQL 数据库包含如下…

python括号配对问题_使用Python的栈实现括号匹配算法

写一个栈的类&#xff1a;stack.py class Stack: def __init__(self): self.items [] def is_Empty(self): return self.items [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): return self.items[len(items)-1] …

万航单位换算器 V1.0 绿色版

软件名称&#xff1a; 万航单位换算器软件语言&#xff1a; 简体中文授权方式&#xff1a; 免费软件运行环境&#xff1a; Win 32位/64位软件大小&#xff1a; 347KB图片预览&#xff1a; 软件简介:万航单位换算器是一个可以随意转换单位的绿色软件&#xff0c;这个软件收集了各…

Golang学习-基础命令

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 、 Golang学习-基础命令 一、go run 用于运行命令源码文件&#xff0c;只能接收一个命令源码文件以及若干个库源码文件作为参数。先将源码文件编译…

js MD5加密处理

关于MD5&#xff1a; MD5.js是通过前台js加密的方式对用户信息&#xff0c;密码等私密信息进行加密处理的工具&#xff0c;也可称为插件。 在本案例中 可以看到MD5共有6种加密方法&#xff1a; 1&#xff0c; hex_md5(value) 2&#xff0c; b64_md5(value) 3&#xff0c; st…

手机qq2008触屏版_比微信老却是00后最爱 手机QQ 16年进化史

5月5日&#xff0c;腾讯QQ发布了《00后数据报告》&#xff0c;第一次以长图形式向公众展示了00后对于QQ的喜爱。当然物是人非&#xff0c;当年那个“胖企鹅”已经和现在功能强大、颜值超高的QQ不可同日而语。那些留存在我们记忆中&#xff0c;给我们带来无尽欢乐的聊天工具&…

密码学是如何保护区块链的

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 密码学是如何保护区块链的 摘要&#xff1a;密码学是应用数学函数以保证数据安全性的科学。 许多风靡的影视作品都在向人们暗示&#xff1a;只要有…

洛谷.4234.最小差值生成树(LCT)

题目链接 先将边排序&#xff0c;这样就可以按从小到大的顺序维护生成树&#xff0c;枚举到一条未连通的边就连上&#xff0c;已连通则(用当前更大的)替换掉路径上最小的边&#xff0c;这样一定不会更差。 每次构成树时更新答案。答案就是当前边减去生成树上最小边的权值。 LCT…

python数字计算公式_Python中数字以及算数运算符的相关使用

Python数字 数字数据类型用于存储数值。 他们是不可改变的数据类型&#xff0c;这意味着改变数字数据类型会分配一个新的对象。 当你指定一个值时&#xff0c;Number对象就会被创建&#xff1a; var1 1 var2 10 您也可以使用del语句删除一些对象引用。 del语句的语法是&#…

软件测试安全测试高峰论坛

Nubia测试以及介绍 基于Cucumber的自动化测试平台 常见Web漏洞之XSS,主要HTML与JS基础、XSS的基础知识与挖掘方法、XSS的利用 自动化测试框架以及测试思路 转载于:https://www.cnblogs.com/ITniu/p/5776005.html

以太坊是什么,为什么这么火?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 以太坊是什么 以太坊&#xff08;Ethereum&#xff09;是一个建立在区块链技术之上&#xff0c; 去中心化应用平台。它允许任何人在平台中建立和使…

Python 把字符串变成浮点数

from functools import reducedi {}di.update(zip(1234567890., [1,2,3,4,5,6,7,8,9,0,.])) def str2float(s): st s.split(.) st1 reduce(lambda x,y: 10*x y, map(lambda x: di[x], st[0])) try: st2 reduce(lambda x,y: (x*0.1 y), map(lambda x:…

msbuild FileSysExcludeFiles

<?xml version"1.0" encoding"utf-8"?> <!-- This file is used by the publish/package process of your Web project. You can customize the behavior of this process by editing this MSBuild file. In order to learn more about this pl…

python二分法求解_Python使用二分法求平方根的简单示例

这篇文章主要为大家详细介绍了Python使用二分法求平方根的简单示例&#xff0c;具有一定的参考价值&#xff0c;可以用来参考一下。 对python这个高级语言感兴趣的小伙伴&#xff0c;下面一起跟随512笔记的小编两巴掌来看看吧&#xff01; 使用二分法&#xff08;Bisection Met…

智能合约语言Solidity Solidity API

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 智能合约语言Solidity Solidity API Solidity 是以太坊智能合约编程语言&#xff0c;阅读本文前&#xff0c;你应该对以太坊、智能合约有所了解&am…

PHP PSR-4 Autoloader 自动加载(中文版)

引用&#xff1a;https://segmentfault.com/a/1190000002521658 Autoloader 关键词 “必须”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、“将会”("SHALL")、“不会”("SHALL NOT")、“应该”(&q…

236. Lowest Common Ancestor of a Binary Tree

原题链接&#xff1a;https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/ 代码实现如下&#xff1a; import java.util.LinkedList; import java.util.Queue; import java.util.Stack;/*** Created by clearbug on 2018/2/26.*/ public clas…

python中append的用法_Python 列表 append() 使用方法及示例

Python 列表 append() 使用方法及示例 append()方法将一个项目添加到列表的末尾。 append()方法将单个项目添加到列表的末尾。 append()方法的语法为&#xff1a;list.append(item) append()参数 该方法有一个参数item -要添加到列表末尾的项目 该项目可以是数字&#xff0c;字…

Web3与智能合约交互实战

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Web3与智能合约交互实战 以太坊中智能合约和web3交互实战 最近区块链、以太坊十分的火&#xff0c;所有就会有许多人去进入区块链这个工作&#x…