制作自动提示匹配项输入框
来源:互联网 发布:乐高 淘宝 代购 编辑:程序博客网 时间:2024/05/22 02:08
平时用百度,输入一个字后都有匹配的选项让你选择。想做一个这样的东西查看资料发现要用到jquer.autocomplete.第一天就做出可简单的,可是后期大数据量时候老是出错,本来以为是ajax有数据传输上限,后来发现是数据中存在特殊字符导致不能解析成json。因为json的结构是[{name:'xxx',age:'12'},{},{}]而这个结构又是由一个string解析来的。所以不能包含如下字符[',",{,}]最后发现制表符换行符都不行。\t,\r,\n。这个整整用了2天才找出来。。好了贴代码
参照资料
http://www.json.org/
http://bbs.chinaunix.net/thread-1736796-1-1.html
//自定义提示.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>自定义提示</title> <script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"></script> <script type="text/javascript" src="Scripts/jquery.autocomplete.min.js"></script> <link rel="Stylesheet" href="Scripts/jquery.autocomplete.css" /> <script type="text/javascript" charset="utf-8"> var emails = [ { name: "Peter Pan", to: "peter@pan.de" }, { name: "Molly", to: "ssa" }, { name: "Forneria Marconi", to: "live@japan.jp" }, { name: "Master <em>Sync</em>", to: "ss" }, { name: "Dr. <strong>Tech</strong> de Log", to: "ss" }, { name: "Don Corleone", to: "ss" }, { name: "Mc Chick", to: "info@donalds.org" }, { name: "Donnie Darko", to: "dd@timeshift.info" }, { name: "Quake The Net", to: "ss" }, { name: "Dr. Write", to: "ss" }, { name: "Mc_xueyong", to: "123sao@qq.com" }, { name: "Dota", to: "IceFrog@bug.com" }, { name: "Dota", to: "IceFrog@bug.com" }, { name: "Dota", to: "IceFrog@bug.com" }, { name: "Dota", to: "IceFrog@bug.com" } ]; $(function () { $('#keyword').autocomplete("data.aspx", { max: 20, //列表里的条目数 minChars: 0, //自动完成激活之前填入的最小字符 width: 400, //提示的宽度,溢出隐藏 scrollHeight: 300, //提示的高度,溢出显示滚动条 matchContains: true, //包含匹配,就是data参数里的数据,是否只要包含文本框里的数据就显示 autoFill: false, //自动填充 //需要把data转换成json数据格式 parse: function (data) { return $.map(eval(data), function (row) { return { data: row, value: row.name + row.modelname, result: row.name } }); }, formatItem: function (row, i, max) { return "<div style='float:left;width:100px'>" + row.name + " " + "</div>" + "<div style='float:left;width:100px'>" + row.modelname + "</div>"; }, formatMatch: function (row, i, max) { return row.name + row.modelname; }, formatResult: function (row) { return row.name; } }).result(function (event, row, formatted) { $("#twoColum_abbr").val("你选择了\n名称:"+row.name+"\n"+"规格型号:"+row.modelname); }); }); </script></head><body><form id="form1" runat="server"> <div> <input id="keyword" /> <input id="getValue" value="提交" type="button" /> </div> <textarea id="twoColum_abbr" style="width:250px" rows="4" cols="6"></textarea></form></body></html>
//data.aspx.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Text;using System.Data.OleDb;using System.Data;public partial class data : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Response.Clear(); Response.Charset = "utf-8"; Response.Buffer = true; this.EnableViewState = false; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = "text/plain"; Response.Write(GetLikeUserName()); Response.Flush(); Response.Close(); Response.End(); } } private string GetLikeUserName() { string connectionString = "Data Source=.;Initial Catalog=SameWayAgile_4_14;User ID=sa;pwd=sa;Provider=SQLOLEDB"; DataSet ds = new DataSet(); using (OleDbConnection conn = new OleDbConnection(connectionString)) { //查询字符串,必须包含主键,否则不会自动生成更新语句 //string SQLString = "select [row],[floor],[line],[bit],[goodname],[shortname],[modelname] from [Part_Goods]"; //string SQLString = "select top 1 * from (SELECT top 8612 a.[GoodsName] as goodname,b.ModelName as modelname FROM (SELECT [ModelId] ,[GoodsName] FROM [SameWayAgile_4_14].[dbo].[Part_Goods]) AS a " //+"FULL JOIN (SELECT [ModelId] ,[ModelName] FROM [SameWayAgile_4_14].[dbo].[Part_GoodsModel]) AS b ON a.ModelId =b.ModelId ORDER BY goodname desc)as c order by goodname"; string SQLString = "SELECT a.[GoodsName] as goodname,b.ModelName as modelname FROM (SELECT [ModelId] ,[GoodsName] FROM [SameWayAgile_4_14].[dbo].[Part_Goods]) AS a " + "FULL JOIN (SELECT [ModelId] ,[ModelName] FROM [SameWayAgile_4_14].[dbo].[Part_GoodsModel]) AS b ON a.ModelId =b.ModelId ORDER BY goodname desc"; try { conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = new OleDbCommand(SQLString, conn); OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); adapter.Fill(ds); } catch (System.Data.SqlClient.SqlException E) { conn.Close(); throw new Exception(E.Message); } } StringBuilder sbstr = new StringBuilder(); sbstr.Append("["); foreach (DataTable table in ds.Tables) { foreach (DataRow dr in table.Rows) { //调试用,为了找到有问题的字符串,最后发现有{',",{,},\t,\r,\n} //if(dr[0].ToString().Contains('\\') ) // sbstr.Append(dr[0]+" "); //if (dr[1].ToString().Contains('\\')) //sbstr.Append(dr[1] + " "); //if (dr[0].ToString().Contains('{') || dr[0].ToString().Contains('}') || dr[0].ToString().Contains('\'') || dr[0].ToString().Contains('\"')) //{ // dr[0] = dr[0].ToString().Replace("\'", "\\\'").Replace("\"", "\\\"").Replace('{', ' ').Replace('}', ' '); // sbstr.Append(dr[0] + " "); //} //if (dr[1].ToString().Contains('{') || dr[1].ToString().Contains('}') || dr[1].ToString().Contains('\'') || dr[1].ToString().Contains('\"')) //{ // dr[1] = dr[1].ToString().Replace("\'", "\\\'").Replace("\"", "\\\"").Replace('{', ' ').Replace('}', ' '); // sbstr.Append(dr[1] + "_______"); //} //for(int i =0;i<dr[0].ToString().Length;i++) // if(dr[0].ToString()[i].ToString().Equals("\t")||dr[0].ToString()[i].ToString().Equals("\r")) // sbstr.Append(dr[0].ToString()[i].ToString()+"\n"); dr[0] =dr[0].ToString().Replace("\'", "\\\'").Replace("\"", "\\\"").Replace('{', ' ').Replace('}', ' ').Replace('\t',' ').Replace('\r',' ').Replace('\n',' '); //发现不能这样替换dr[1] = dr[1].ToString().Replace(Array("\'","\"",'{','}'),Array("\\\'","\\\"",' ',' '); dr[1] = dr[1].ToString().Replace("\'", "\\\'").Replace("\"", "\\\"").Replace('{', ' ').Replace('}', ' ').Replace('\t', ' ').Replace('\r', ' ').Replace('\n', ' '); sbstr.Append("{name:'" + dr[0].ToString() + "',modelname:'" + dr[1] + "'},"); } } sbstr.Remove(sbstr.Length - 1, 1); sbstr.Append("]"); return sbstr.ToString(); //string[] str = { "January", "Ceshi", "jQuery", "josn", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; //string[] strc = { "January", "Ceshi", "jQuery", "josn", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; //StringBuilder sbstr = new StringBuilder(); //sbstr.Append("["); //for (int i = 0; i < str.Length; i++) //{ // if (i == str.Length - 1) // { // sbstr.Append("{name:'" + str[i] + "',to:'" + strc[i] + "'}"); // } // else // { // //sbstr.Append("{name:'" + str[i] + "',to:'中文测试" + i + Request.QueryString["q"] + "'},"); // sbstr.Append("{name:'" + str[i] + "',to:'" + strc[i] + "'},"); // } //} //sbstr.Append("]"); //return sbstr.ToString(); }}
运行效果
- 制作自动提示匹配项输入框
- 自动匹配输入框
- android自动提示输入框
- jQuery+JavaScript+PHP 制作简单的文本框输入自动提示
- Android-->输入框自动提示文本, 失去焦点自动输入
- 可输入、自动匹配的下拉框
- 可输入、自动匹配的下拉框
- android 输入框自动匹配-AutoCompleteTextView
- 输入框自动匹配实践(java web)
- 输入框自动匹配控件AutoCompleteTextView
- 下拉框(可输入+自动匹配)
- js、ajax 输入框自动匹配
- AspxCombobox自动匹配输入
- 自动输入匹配
- EXCEL-单元格输入提示,自动补全,简码输入,首字母拼音及汉子模糊匹配
- auto complete输入框 自动提示
- auto complete输入框 自动提示
- 【Android】EditText输入框自动提示
- Swing控件(JPanel,Container等)设置背景图片
- CMD命令
- 增加系统安全的shell脚本
- 对象序列化补充
- Linux多线程编程(不限Linux)
- 制作自动提示匹配项输入框
- 加密软件的加密技术发展分析
- rdlc报表心得(二)
- 在Windows环境下使用Git下载Android源代码
- Android 加载图片文件 函数
- 系统分析师考试心得
- SSL Ldap linux tomcat 配置备忘
- PHP5.4的新特性
- java高新技术