.NET使用js制作百度搜索下拉提示效果(不是局部刷新)實(shí)現(xiàn)思路
更新時(shí)間:2013年01月13日 16:27:48 作者:
搞了個(gè)不是局部刷新的百度搜索框下拉提示效果大致思路:前臺(tái)放一個(gè)input標(biāo)簽,然后當(dāng)該標(biāo)簽內(nèi)的值輸入有變化的時(shí)候,調(diào)用后臺(tái)代碼查詢 符合條件的數(shù)據(jù)綁定ListBox,感興趣的朋友可以了解下
搞了個(gè)不是局部刷新的百度搜索框下拉提示效果,在被領(lǐng)導(dǎo)批了n次后,問(wèn)了n次后,弄出來(lái)了,真心感覺(jué)我這個(gè)小腦殼,太不靈光了,太懶了。記錄下來(lái),以免忘記。
大致思路:前臺(tái)放一個(gè)input標(biāo)簽,然后當(dāng)該標(biāo)簽內(nèi)的值輸入有變化的時(shí)候,調(diào)用后臺(tái)代碼查詢 符合條件的數(shù)據(jù)綁定ListBox。
具體實(shí)現(xiàn)思路:一個(gè)input,當(dāng)輸入值變化時(shí),調(diào)用后臺(tái)代碼。但是怎么調(diào)用呢,這個(gè)是個(gè)問(wèn)題了,在該input下放一個(gè)隱藏的服務(wù)器控件button,隱藏該控件,當(dāng)input里值變化時(shí),調(diào)用js,在js里觸發(fā)該按鈕的onclick事件,把具體的操作數(shù)據(jù)的代碼就可以放到onclick事件里了。但是這里的隱藏不是使用visable來(lái)隱藏的,而是使用:btnHelp.Style.Add("display", "none");[ps:btnHelp按鈕ID,放在Page_Load里],如果使用visable,則會(huì)造成在js里獲得不到該對(duì)象。 數(shù)據(jù)是有了,可是,怎樣使用上下鍵讓ListBox里的內(nèi)容顯示到Input上呢,很明顯,ListBox本身支持上下鍵的,只需要調(diào)用SelectedIndexChanged方法,然后為Input賦值即可??墒?,怎么樣保證光標(biāo)就乖乖的聽話,你按上下鍵它就自動(dòng)跳到ListBox里呢,好吧,寫js吧,當(dāng)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;
//根據(jù)瀏覽器判斷
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(); //觸發(fā)Button的onclick事件
}
//為input 添加的keydown事件
function InputKeyDownFocus() {
//方向鍵的ASCII值:上:38,下:40
if (event.keyCode == "38" || event.keyCode == "40") {
document.getElementById("lst").focus(); //使ListBox獲得焦點(diǎn)
}
else {
document.getElementById("inpContent").focus();
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
輸入內(nèi)容:
<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>
后臺(tái)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
/// 前臺(tái)調(diào)用的方法
/// /summary
/// param name="sender"/param
/// param name="e"/param
protected void btnHelp_Click(object sender, EventArgs e)
{
string inputStr = inpContent.Value.Trim(); //文本框輸入系統(tǒng)
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)
{
//符合條件的數(shù)據(jù)
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下拉框的值改變時(shí)
/// /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();
}
哦了
大致思路:前臺(tái)放一個(gè)input標(biāo)簽,然后當(dāng)該標(biāo)簽內(nèi)的值輸入有變化的時(shí)候,調(diào)用后臺(tái)代碼查詢 符合條件的數(shù)據(jù)綁定ListBox。
具體實(shí)現(xiàn)思路:一個(gè)input,當(dāng)輸入值變化時(shí),調(diào)用后臺(tái)代碼。但是怎么調(diào)用呢,這個(gè)是個(gè)問(wèn)題了,在該input下放一個(gè)隱藏的服務(wù)器控件button,隱藏該控件,當(dāng)input里值變化時(shí),調(diào)用js,在js里觸發(fā)該按鈕的onclick事件,把具體的操作數(shù)據(jù)的代碼就可以放到onclick事件里了。但是這里的隱藏不是使用visable來(lái)隱藏的,而是使用:btnHelp.Style.Add("display", "none");[ps:btnHelp按鈕ID,放在Page_Load里],如果使用visable,則會(huì)造成在js里獲得不到該對(duì)象。 數(shù)據(jù)是有了,可是,怎樣使用上下鍵讓ListBox里的內(nèi)容顯示到Input上呢,很明顯,ListBox本身支持上下鍵的,只需要調(diào)用SelectedIndexChanged方法,然后為Input賦值即可??墒?,怎么樣保證光標(biāo)就乖乖的聽話,你按上下鍵它就自動(dòng)跳到ListBox里呢,好吧,寫js吧,當(dāng)input里的值輸入完成,即:onkeyup事件里寫即可。
具體代碼:
aspx代碼如下:
復(fù)制代碼 代碼如下:
<%@ 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;
//根據(jù)瀏覽器判斷
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(); //觸發(fā)Button的onclick事件
}
//為input 添加的keydown事件
function InputKeyDownFocus() {
//方向鍵的ASCII值:上:38,下:40
if (event.keyCode == "38" || event.keyCode == "40") {
document.getElementById("lst").focus(); //使ListBox獲得焦點(diǎn)
}
else {
document.getElementById("inpContent").focus();
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
輸入內(nèi)容:
<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>
后臺(tái)cs代碼:
復(fù)制代碼 代碼如下:
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
/// 前臺(tái)調(diào)用的方法
/// /summary
/// param name="sender"/param
/// param name="e"/param
protected void btnHelp_Click(object sender, EventArgs e)
{
string inputStr = inpContent.Value.Trim(); //文本框輸入系統(tǒng)
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)
{
//符合條件的數(shù)據(jù)
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下拉框的值改變時(shí)
/// /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();
}
哦了
相關(guān)文章
基于MVC4+EasyUI的Web開發(fā)框架之附件上傳組件uploadify的使用
這篇文章主要介紹了基于MVC4+EasyUI的Web開發(fā)框架之附件上傳組件uploadify的使用,需要的朋友可以參考下2017-08-08
asp.net ajax實(shí)現(xiàn)無(wú)刷新驗(yàn)證碼
實(shí)現(xiàn)ajax無(wú)刷新驗(yàn)證碼首先需要兩個(gè)aspx頁(yè)面,第一個(gè)用來(lái)展示,另一個(gè)用來(lái)后臺(tái)刷新驗(yàn)證碼2011-10-10
ASP.NET MVC中解析淘寶網(wǎng)頁(yè)出現(xiàn)亂碼問(wèn)題的解決方法
最近在使用MVC解析淘寶網(wǎng)頁(yè)出現(xiàn)亂碼問(wèn)題,原因就是中文字符格式出現(xiàn)沖突,ASP.NET MVC 默認(rèn)采用utf-8,但是淘寶網(wǎng)頁(yè)采用gbk。在網(wǎng)上找了一下,最常用的解決方法,特分享下2013-04-04
Entity Framework使用Code First模式管理存儲(chǔ)過(guò)程
本文詳細(xì)講解了Entity Framework使用Code First模式管理存儲(chǔ)過(guò)程的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
asp.net Cookie值中文亂碼問(wèn)題解決方法
cookie里面不能寫中文,是由于cookie先天的編碼方式造成的,所以有必要存在一種中間的編碼方式:URLEncode是最好的選擇,感興趣的你可千萬(wàn)不要錯(cuò)過(guò)了哈,或許本文提供的知識(shí)點(diǎn)對(duì)你學(xué)習(xí)cookie有所幫助2013-02-02
C#實(shí)現(xiàn)把圖片下載到服務(wù)器代碼
本文給大家分享的是實(shí)現(xiàn)這樣一個(gè)功能,想將遠(yuǎn)程服務(wù)器的圖片下載到本地主機(jī),圖片的名稱就是數(shù)據(jù)庫(kù)的一個(gè)字段,圖片不是以二進(jìn)制的形式存儲(chǔ)在數(shù)據(jù)庫(kù)的,數(shù)據(jù)庫(kù)存儲(chǔ)的只是圖片的名詞。2015-11-11
.net?core中高效的動(dòng)態(tài)內(nèi)存管理方案
這篇文章介紹了.net?core中高效的動(dòng)態(tài)內(nèi)存管理方案,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07

