|
搞了个不是局部刷新的百度搜索框下拉提示效果大致思路:前台放一个input标签,然后当该标签内的值输入有变化的时候,调用后台代码查询 符合条件的数据绑定ListBox,感兴趣的朋友可以了解下
搞了个不是局部刷新的百度搜索框下拉提示效果,在被领导批了n次后,问了n次后,弄出来了,真心感觉我这个小脑壳,太不灵光了,太懒了。记录下来,以免忘记。
大致思路:前台放一个input标签,然后当该标签内的值输入有变化的时候,调用后台代码查询 符合条件的数据绑定ListBox。
具体实现思路:一个input,当输入值变化时,调用后台代码。但是怎么调用呢,这个是个问题了,在该input下放一个隐藏的服务器控件button,隐藏该控件,当input里值变化时,调用js,在js里触发该按钮的onclick事件,把具体的操作数据的代码就可以放到onclick事件里了。但是这里的隐藏不是使用visable来隐藏的,而是使用:btnHelp.Style.Add("display", "none");[ps:btnHelp按钮ID,放在Page_Load里],如果使用visable,则会造成在js里获得不到该对象。 数据是有了,可是,怎样使用上下键让ListBox里的内容显示到Input上呢,很明显,ListBox本身支持上下键的,只需要调用SelectedIndexChanged方法,然后为Input赋值即可。可是,怎么样保证光标就乖乖的听话,你按上下键它就自动跳到ListBox里呢,好吧,写js吧,当input里的值输入完成,即:onkeyup事件里写即可。
具体代码: aspx代码如下: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!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 language="javascript" type="text/javascript"> function abc() { var inputV = document.getElementById("in").value; //根据浏览器判断 if (/msie/i.test(navigator.userAgent)) //ie浏览器 { document.getElementById("lbltext").innerText = inputV; } else {//非ie浏览器,比如Firefox document.getElementById("lbltext").innerHTML = inputV; //火狐等浏览器的赋值方式 } } function InputT() { var f = document.getElementById("inpContent"); var abc = document.getElementById("btnHelp"); document.getElementById("btnHelp").click(); //触发Button的onclick事件 } //为input 添加的keydown事件 function InputKeyDownFocus() { //方向键的ASCII值:上:38,下:40 if (event.keyCode == "38" || event.keyCode == "40") { document.getElementById("lst").focus(); //使ListBox获得焦点 } else { document.getElementById("inpContent").focus(); } } </script> </head> <body> <form id="form1" runat="server"> <div> 输入内容: <br /> <input runat="server" id="inpContent" oninput="InputT()" onpropertychange="InputT()" onkeyup="InputKeyDownFocus()" </br> /> <asp:ListBox runat="server" ID="lst" OnSelectedIndexChanged="lst_SelectedIndexChanged" AutoPostBack="true"</asp:ListBox> <asp:Button runat="server" ID="btnHelp" OnClick="btnHelp_Click" Text="隐藏按钮" /> </div> </form> </body> </html> 后台cs代码: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { enum Direction { Up, Right, Down, Left } Direction dir; protected void Page_Load(object sender, EventArgs e) { btnHelp.Style.Add("display", "none"); } protected void lstShow_SelectedIndexChanged(object sender, EventArgs e) { ListBox lItem = (ListBox)sender; string lItemValue = lItem.SelectedItem.Text; txtInput.Text = lItemValue; } /// summary /// 前台调用的方法 /// /summary /// param name="sender"/param /// param name="e"/param protected void btnHelp_Click(object sender, EventArgs e) { string inputStr = inpContent.Value.Trim(); //文本框输入系统 Listobject listNew = new Listobject(); listNew.Add("abc"); listNew.Add("abcde"); listNew.Add("bcd"); listNew.Add("bcdef"); listNew.Add("bcdagb"); listNew.Add("bbccaa"); listNew.Add("aabbdd"); listNew.Add("ccaabbdd"); lst.Items.Clear(); //清除原有值 int i = 1; foreach (object obj in listNew) { //符合条件的数据 if (obj.ToString().Contains(inputStr)) { lst.Style.Add("display", "block"); lst.Items.Add(new ListItem(obj.ToString(), "" + i)); i++; } } if (lst.Items.Count 0) { lst.SelectedIndex = 0; } inpContent.Focus(); } /// summary /// ListBox下拉框的值改变时 /// /summary /// param name="sender"/param /// param name="e"/param protected void lst_SelectedIndexChanged(object sender, EventArgs e) { ListBox lItem = (ListBox)sender; lst.Style.Add("display", "block"); string lItemValue = lItem.SelectedItem.Text; inpContent.Value = lItemValue; lst.Focus(); } 哦了 |
|