.NET使用js制作百度搜索下拉提示效果(不是局部刷新)实现思路
程序员文章站
2024-03-04 17:15:41
搞了个不是局部刷新的百度搜索框下拉提示效果,在被领导批了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();
}
哦了
大致思路:前台放一个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();
}
哦了