博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET中使用js实现百度搜索下拉提示效果[不是局部刷新,呜呜。。]
阅读量:5024 次
发布时间:2019-06-12

本文共 3766 字,大约阅读时间需要 12 分钟。

搞了个不是局部刷新的百度搜索框下拉提示效果,在被领导批了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" οninput="InputT()" onpropertychange="InputT()"
οnkeyup="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(); //文本框输入系统

List<object> listNew = new List<object>();

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();

}

 

哦了

转载于:https://www.cnblogs.com/ZQiuMei/archive/2012/11/09/2763121.html

你可能感兴趣的文章
Java进击C#——语法之知识点的改进
查看>>
IdentityServer流程图与相关术语
查看>>
BirdNet: a 3D Object Detection Framework from LiDAR information
查看>>
icon fonts入门
查看>>
【Django】如何按天 小时等查询统计?
查看>>
HDU2191(多重背包)
查看>>
测试用例(一)
查看>>
【转】 mysql反引号的使用(防冲突)
查看>>
邮件中的样式问题
查看>>
AJAX 状态值与状态码详解
查看>>
php面向对象编程(oop)基础知识示例解释
查看>>
1.在数组中找到与给定总和的配对
查看>>
树的子结构
查看>>
关于根据Build Platform或者OS 加载x86或者x64 dll的问题
查看>>
程序员高效开发的几个技巧
查看>>
js-权威指南学习笔记19.2
查看>>
hexo 搭建博客
查看>>
关于 UIWebView 几个高级用法
查看>>
maven创建的项目中无法创建src/main/java 解决方案
查看>>
华为软件开发云测评报告二:代码检查
查看>>