欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-05 19:58:31
搞了个不是局部刷新的百度搜索框下拉提示效果,在被领导批了n次后,问了n次后,弄出来了,真心感觉我这个小脑壳,太不灵光了,太懒了。记录下来,以免忘记。 大致思路:前台放一个i...
搞了个不是局部刷新的百度搜索框下拉提示效果,在被领导批了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();
}

哦了