服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP.NET教程 - .NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路

.NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路

2019-10-16 10:48asp.net技术网 ASP.NET教程

搞了个不是局部刷新的百度搜索框下拉提示效果大致思路:前台放一个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(); 


哦了

延伸 · 阅读

精彩推荐