校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > ASP.NET搭配Ajax實現搜索提示功能

ASP.NET搭配Ajax實現搜索提示功能

熱門標簽:海東防封電銷卡 上海市三維地圖標注 安陸市地圖標注app 辦公用地圖標注網點怎么操作 西寧電銷外呼系統公司 云南外呼系統代理 南昌自動外呼系統線路 寧德防封版電銷卡 聊城智能電銷機器人電話

平時的軟件開發中,信息的搜索是經常碰到的,增加搜索關鍵字提示是提高用戶體驗的一種很好的辦法。今天就介紹下在ASP.NET如何利用AJAX來實現搜索的信息提示!
1.需要了解的一些知識點

(1)AJAX對象不同瀏覽器的創建

不同的瀏覽器對AJAX(XMLHttpRequest)對象的實現是不一樣的,例如IE瀏覽器是通過ActiveX控件來實現AJAX對象。而其他一些瀏覽器比如火狐,它將AJAX對象實現成了一個瀏覽器內部的對象叫XMLHttpRequest,所以不同的瀏覽器創建AJAX對象的方式也就不同,那么我們來看看不同瀏覽器之間創建AJAX對象的方式:

在IE瀏覽器下面的創建:

   //IE瀏覽器
    try {
      //IE5.0
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        //IE5.5 以上版本
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) { }

 在火狐瀏覽器下面的創建:

//火狐, Safari 等瀏覽器
httpRequest = new XMLHttpRequest();

多瀏覽器AJAX對象創建函數:

function createAjaxObj() {
  var httpRequest = false;

  //判斷是否包含XMLHttpRequest對象 PS:將來IE高也有可能繼承次對象
  if (window.XMLHttpRequest) {
    //火狐 , Safari 等瀏覽器
    httpRequest = new XMLHttpRequest();
    if (httpRequest.overrideMimeType)
      httpRequest.overrideMimeType('text/xml');

  }//判斷是否支持Active控件對象
  else if (window.ActiveXObject) {
    //IE瀏覽器
    try {
      //IE5.0
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        //IE5.5以上
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) { }
    }
  }
  //返回創建好的AJAX對象
  return httpRequest;
}

(2)文本框內容改變的事件在不同瀏覽器下的使用

 文本框內容改變的事件目前來說還沒有一個標準的版本。我們目前只關心IE與火狐好了,那么在IE和火狐下這兩個時間分別怎么表示呢?

IE: onpropertychange

FireFox: oninput

  那么如何在頁面加載時,根據瀏覽器給文本框附加對應的change事件呢?

1.JS如何判斷瀏覽器版本                  

//IE瀏覽器
if (navigator.userAgent.indexOf("MSIE") > 0)
{ }

//火狐瀏覽器
if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0)
{}

 2.根據瀏覽器版本給文本框附加對應事件

function getOs() {
  //判斷瀏覽器類型 
    if (navigator.userAgent.indexOf("MSIE") > 0) {
    //此時假設文本框id為'txtSearch'
    //為文本框附加IE所支持的事件
    document.getElementById('txtSearch').attachEvent("onpropertychange", search);
    OsTyep = "MSIE";
  } else if (navigator.userAgent.indexOf("Firefox") > 0) {
    //此時假設文本框id為'txtSearch'
    //為文本框附加火狐所支持的事件
    document.getElementById('txtSearch').addEventListener("input", search, false);
    OsTyep = "Firefox";
  }
}

 3.根據瀏覽器版本給文本框清除對應事件

function ClearOS() {
    if (navigator.userAgent.indexOf("MSIE") > 0) {
        //此時假設文本框id為'txtSearch'
        //為文本框清除IE所支持的事件
        document.getElementById('txtSearch').detachEvent("onpropertychange", search);
        OsTyep = "MSIE";
    } else if (navigator.userAgent.indexOf("Firefox") > 0) {
        //此時假設文本框id為'txtSearch'
        //為文本框清除火狐所支持的事件
        document.getElementById('txtSearch').removeEventListener("input", search, false);
        OsTyep = "Firefox";
    }
}

二、客戶端的設計

(1)實現流程的分析

了解完以上知識點之后,我們來看一下實現搜索提示的一個整體流程:

                   1) 首先客戶端通過文本框輸入事件捕獲輸入的關鍵字

                   2)  在通過我們之前創建好的AJAX對象提交給服務器

                   3) 服務器接受提交的關鍵字,進行查詢將結果集返回給客戶端進行顯示

 流程如下:

 (2)樣式的編寫

那么接下來我們來看一下樣式,其中包括當文本框鼠標移動上去給邊框加顏色與搜索結果行選中的樣式等,這里就不細說了,列舉出來供參考:

 style type="text/css" media="screen">
  body
  {
    font:11px arial;
  }
  /*設置提示提示列表上的樣式表*/
  .search_link
  {     
     background-color:#FFFFFF;
     cursor: pointer;
     line-height:24px;
     text-indent:6px;
  }
  /*設置當鼠標移動到提示列表上的樣式表*/
  .search_link_over
  {   
     background-color:#E8F2FE;
     cursor: pointer;
     line-height:24px;
     text-indent:6px;

  }
  
  /*設置顯示搜索提示div的樣式表*/
  #search_div
  {
    position:absolute;
    background-color:#FFFFFF;
    text-align:left;
    border:1px solid #000000;
    border-top:0px;
    display:none;
    min-width:553px;
    width:553px;
  }
  
  /*文本框樣式*/
  .mainInput {
  line-height: 26px;
  height: 28px;
  width: 550px;
  font-size: 16px;
  font-family: "微軟雅黑", "宋體", Candara;
  font-weight: normal;
  color: #666;
  margin: auto;
  border: none;
  text-indent: 8px;
}
  
  /*鼠標放上文本框樣式*/
  .mainInputOver {
  width:552px;
  height:30px;
  border-top-width: 1px;
  border-right-width: 1px;
  border-bottom-width: 1px;
  border-left-width: 1px;
  border-top-style: solid;
  border-right-style: solid;
  border-bottom-style: solid;
  border-left-style: solid;
  border-top-color: #b7b7b7;
  border-right-color: #d0d0d0;
  border-bottom-color: #d0d0d0;
  border-left-color: #d0d0d0;
}
/*鼠標離開文本框樣式*/
.mainInputFocus {
  width:552px;
  height:30px;
  border: 1px solid #41b5f2;
}

/*點擊文本框樣式*/
.myBorder
{
  width:552px;
  height:30px;
  border-top: 1px solid #CCCCCC;
  border-bottom: 1px solid #DDDDDD;
  border-left: 1px solid #DDDDDD;
  border-right: 1px solid #DDDDDD;  
}
  /style>

(3)aspx頁面與ajax_search.js文件的編寫

接下來就是一個比較重要的環節了,aspx頁面與ajax_search.js文件中包含了整體包括顯示與請求的方法例如:

1.頁面的實現

body onload="getOs()" onkeydown="if(event.keyCode==13)return false;">
  form id="form1" runat="server">
  div>
  div class="myBorder" onmouseover="this.className='mainInputOver'" onmouseout="this.className='myBorder'" onclick="this.className='mainInputFocus'">
  input type="text" id="txtSearch" name="txtSearch" onblur="HiddenDiv()" alt="SearchCriteria" autocomplete="off" class="mainInput" />
  /div>
  !--該DIV作為現實搜索提示的結果-->
  div id="search_div" style="margin-top:0px" >/div>
  /div>
  /form>
/body>

2.根據瀏覽器創建AJAX對象

var searchReq = createAjaxObj();
var OsTyep = '';

function getOs() {
  //判斷瀏覽器類型 
  if (navigator.userAgent.indexOf("MSIE") > 0) {
    document.getElementById('txtSearch').attachEvent("onpropertychange", search);
    OsTyep = "MSIE";
  } else if (navigator.userAgent.indexOf("Firefox") > 0) {
    document.getElementById('txtSearch').addEventListener("input", search, false);
    OsTyep = "Firefox";
  }
}

function ClearOS() {
  if (navigator.userAgent.indexOf("MSIE") > 0) {
    document.getElementById('txtSearch').detachEvent("onpropertychange", search);
    OsTyep = "MSIE";
  } else if (navigator.userAgent.indexOf("Firefox") > 0) {
    document.getElementById('txtSearch').removeEventListener("input", search, false);
    OsTyep = "Firefox";
  }
}

function createAjaxObj() {
  var httpRequest = false;

  //判斷是否包含XMLHttpRequest對象 PS:將來IE高也有可能繼承次對象
  if (window.XMLHttpRequest) {
    //火狐 , Safari 等瀏覽器
    httpRequest = new XMLHttpRequest();
    if (httpRequest.overrideMimeType)
      httpRequest.overrideMimeType('text/xml');

    //ie: onpropertychange
    //ff: oninput
  } //判斷是否支持Active控件對象
  else if (window.ActiveXObject) {
    //IE瀏覽器
    try {
      //IE5.0
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        //IE5.5以上
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { }
    }
  }
  //返回創建好的AJAX對象
  return httpRequest;
}

 3.創建請求與返回數據的顯示

 //異步請求服務器獲取搜索結果
function search() {
  if (searchReq.readyState == 4 || searchReq.readyState == 0) {
    //獲得文本框中的值
    var valStr = escape(document.getElementById("txtSearch").value);
    //建立連接
    searchReq.open("GET", encodeURI('Search.ashx?search=' + valStr+'fresh=' + Math.random()), true);
    //當請求狀態改變時調用 handleSearch方法
    searchReq.onreadystatechange = handleSearch;
    searchReq.send(null);
  }
}

//返回結果處理方法
function handleSearch() {
  if (searchReq.readyState == 4) {
    //獲得搜索提示結果的元素DIV
    var searchDIV = document.getElementById("search_div");
    searchDIV.innerHTML = "";

    //用^將返回的文本數據分割成數組
    var resultStrArr = searchReq.responseText.split("^");

    //循環構建HTML代碼
    for (var i = 0; i  resultStrArr.length - 1; i++) {
      var htmlStr = 'div onmouseover="selectOverDiv(this,'+i+');" ';
      htmlStr += 'onmouseout="selectOutDiv(this,'+i+');" ';
      htmlStr += 'onclick="setSearch(this.innerHTML);" ';
      htmlStr += 'class="search_link " style="display:block;width:100%;" >' + resultStrArr[i] + '/div>';

      searchDIV.innerHTML += htmlStr;
    }
    ShowDiv();
    x = -1;
  }
}

 4.將數據選中數據顯示文本框中

 上邊代碼中在循環構建HTML代碼時,我們給構建的DIV加入了三個事件分別是:

 1 onmouseover="selectOverDiv(this,'+i+');"

當鼠標放上去時調用selectOverDiv函數傳遞自己進去

 2 onmouseout="selectOutDiv(this,'+i+');"

 當鼠標放上去時調用selectOutDiv函數傳遞自己進去

 3 onclick="setSearch(this.innerHTML);"

 當鼠標點擊DIV時調用setSearch函數傳入本身DIV中內容

那么還是來看下這幾個方法的實現吧:

function selectOverDiv(div_value, i) {  
  div_value.className = "search_link_over";
  var my_div = document.getElementById("search_div").getElementsByTagName("div")
  var the_num = my_div.length;
  for (var k = 0; k  the_num; k++) {
    selectOut(my_div[k]);
    if (k == i) {
      selectOver(my_div[k])
    }
  }
  isCheckDiv = true;
  x = i;
}

function selectOutDiv(div_value,i) {
  isCheckDiv = false;
  div_value.className = "search_link";
  x = i;
}

function setSearch(value) {
  //清空文本框的內容改變事件是因為我們給選中值復制時 該事件會觸發 
  //所以先清空次事件
  ClearOS();
  document.getElementById("txtSearch").value = value;
  //設置該屬性為false 在調用HiddenDiv函數會隱藏提示結果DIV
  isCheckDiv = false; 
  HiddenDiv();
  //在賦值完成后再次附加修改時間
  getOs();
}

function ShowDiv() {
  var content = document.getElementById("txtSearch").value;
  var divConten = document.getElementById("search_div").innerHTML;
  if (content != ''  divConten != '') {
    document.getElementById("search_div").style.display = "block"
  } else {
  isCheckDiv = false;
  HiddenDiv();
  }
  
}
function HiddenDiv() {
  if (isCheckDiv == false) {
    document.getElementById("search_div").style.display = "none";
    document.getElementById("search_div").innerHTML = '';
  }
}

 5.增加鍵盤上下鍵選中提示數據與回車鍵選中數據到文本框

 var index = -1; //表示當前選中的行索引
function keyDown() {
  var value = event.keyCode
  //向上38,向下40,回車13
  var the_key = event.keyCode 
  //判斷提示DIV是否是現實狀態
  if (document.getElementById("search_div").style.display != "none") {
    //獲取里面所用行
    var my_div = document.getElementById("search_div").getElementsByTagName("div")
    var the_num = my_div.length;
    switch (the_key) {
      case 40: //向下
        //判斷index是否已經到最下面
        if (index == the_num - 1) {
          index = 0;
        } else {
          index++;
        }
        //清楚所有選中
        for (var i = 0; i  the_num; i++) {
          selectOut(my_div[i]);
        }
        //根據index選中對應索引行
        for (i = 0; i  the_num; i++) {
          if (i == index) {
            selectOver(my_div[i])
          }
        }
        break;
      case 38: //向上
        //判斷index是否已經到最上面
        if (index == 0) {
          index = the_num-1;
        } else { index--; }
        //清楚所有選中
        for (var i = 0; i  the_num; i++) {
          selectOut(my_div[i]);
        }
        //根據index選中對應索引行
        for (i = 0; i  the_num; i++) {
          if (i == index) {
            selectOver(my_div[i])
          }
        }
        break;
      case 13: //回車
        //將選中的內容放入文本框中
        if (my_div[index].innerHTML != null) {
          setSearch(my_div[index].innerHTML);
        }
        break;
    }

  }

}
document.onkeydown = keyDown;

3.服務器端的設計

(1)實現一個虛擬的數據源

前臺傳來關鍵字,后臺必須要有數據匹配,為了簡單我就不建立數據庫了 我就模擬一個數據源好啦!

步驟:右鍵項目 --> 添加新項--> 選擇一般處理程序命名為:Search.ashx 編寫代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.CodeDom;
using System.Globalization;
using System.ComponentModel;
using System.Collections;

public class Search : IHttpHandler {

  //定義一個數據源
  public Liststring> DataSource
  {
    get
    {
      Liststring> list = new Liststring>()
      {
        "我愛C#",
        "我愛.NET",
        "我愛微軟技術"
      };
      return list;
    }
  }
  
  public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
  }
 
  public bool IsReusable {
    get {
      return false;
    }
  }

} 

(2)搜索數據源返回固定格式數據以字符串形式

  緊接著我們要在ProcessReques方法中加入我們搜索數據源構建返回相應數據集,拼接結果字符串返回給客戶端。代碼如下:

 public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";

    //接受客戶端關鍵字并且解碼
   string searchStr = HttpUtility.UrlDecode(context.Request.QueryString["search"].ToString(), System.Text.Encoding.UTF8);

    //搜索數據源集合中匹配的關鍵字
    var result = (from string n in DataSource
             where n.Contains(searchStr)
             select n).ToListstring>();
    
    StringBuilder sb = new StringBuilder(100);
    //將匹配關鍵字用符號^ 分割拼接成字符串
    foreach (string str in result as Liststring>)
    {
      sb.AppendFormat("{0}^", str);
    }
    //返回客戶端
    context.Response.Write(sb.ToString());
  }

 那么我們的基于AJAX的搜索提示功能就順利的完成了,運行效果如下:

以上就是ASP.NET利用AJAX實現搜索提示的實現過程,內容很詳細,思路也很清晰,希望對大家的學習有所幫助。

您可能感興趣的文章:
  • jquery ajax請求方式與提示用戶正在處理請稍等
  • php+ajax做仿百度搜索下拉自動提示框(有實例)
  • ajax 自動完成下拉框 自動提示位置問題
  • asp+ajax仿google搜索提示效果代碼
  • 使用jQuery全局事件ajaxStart為特定請求實現提示效果的代碼
  • ajax Suggest類似google的搜索提示效果
  • jquery formValidator插件ajax驗證 內容不做任何修改再離開提示錯誤的bug解決方法
  • asp.net+js實現的ajax sugguest搜索提示效果
  • ajax實時任務提示功能的實現代碼
  • Ajax實現智能提示搜索功能

標簽:贛州 平涼 衢州 崇左 青海 汕尾 洛陽 南寧

巨人網絡通訊聲明:本文標題《ASP.NET搭配Ajax實現搜索提示功能》,本文關鍵詞  ASP.NET,搭配,Ajax,實現,搜索,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET搭配Ajax實現搜索提示功能》相關的同類信息!
  • 本頁收集關于ASP.NET搭配Ajax實現搜索提示功能的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    99久久国产综合精品女不卡| 亚洲影院理伦片| 国产精品女同一区二区三区| 亚洲国产精品久久久久秋霞影院| 亚洲免费观看高清完整版在线| 97精品久久久午夜一区二区三区 | 午夜激情久久久| 久久97超碰色| 精品国产凹凸成av人网站| 亚洲国产精品影院| 99国产精品视频免费观看| 在线播放/欧美激情| 亚洲久草在线视频| 欧美一级黄色大片| 色婷婷精品久久二区二区蜜臂av | 亚洲乱码国产乱码精品精可以看| 日本高清不卡一区| 亚洲成人动漫在线免费观看| 久久久精品欧美丰满| 欧美视频一区二区| 久久超级碰视频| 亚洲高清免费在线| 国产精品久久久久久久久免费樱桃| 91视视频在线观看入口直接观看www| 日韩av网站在线观看| 免费成人在线播放| 久久色.com| 91麻豆精品久久久久蜜臀| 国产一区福利在线| 成人一级黄色片| 成人精品电影在线观看| 欧美一区二区精品在线| 国产日韩欧美综合一区| 亚洲日本青草视频在线怡红院| 91麻豆精东视频| av中文字幕在线不卡| 99视频精品免费视频| 成人福利视频网站| 色婷婷综合在线| 欧美一区二区啪啪| 久久综合色8888| 1区2区3区欧美| 日韩精品一级二级 | 欧洲av在线精品| 日韩亚洲欧美中文三级| 国产亚洲一本大道中文在线| 亚洲欧美另类在线| 免费人成黄页网站在线一区二区| 国模娜娜一区二区三区| 99久久er热在这里只有精品66| 欧美性猛片aaaaaaa做受| 久久久久久久综合| 亚洲国产va精品久久久不卡综合| 免费精品99久久国产综合精品| 粉嫩av一区二区三区| 欧美色图免费看| 亚洲国产成人在线| 久久精品国产**网站演员| 一本大道久久精品懂色aⅴ| 日韩精品综合一本久道在线视频| 亚洲美女淫视频| 大胆亚洲人体视频| 久久免费精品国产久精品久久久久| 亚洲小少妇裸体bbw| 色天天综合色天天久久| 中文在线一区二区| 国产电影一区二区三区| 欧美一区日本一区韩国一区| 亚洲妇女屁股眼交7| 97成人超碰视| 伊人开心综合网| 日本高清不卡视频| 亚洲一区二区三区四区在线免费观看| 国产揄拍国内精品对白| 久久久久国产精品麻豆ai换脸 | 日本欧美大码aⅴ在线播放| 欧美日韩视频专区在线播放| 亚洲国产精品久久久久婷婷884| 色先锋资源久久综合| 午夜日韩在线电影| 欧美电影免费观看高清完整版在线观看 | 国产东北露脸精品视频| 国产精品成人在线观看| 色综合久久中文综合久久97| 一区二区三区在线影院| 67194成人在线观看| 国产一区二区三区香蕉| 国产精品久久久一本精品 | 成人少妇影院yyyy| 亚洲第一综合色| 国产精品污www在线观看| 欧美在线你懂的| 国产一区三区三区| 亚洲综合一二三区| 欧美激情一区三区| 日韩精品专区在线影院观看| 波多野结衣的一区二区三区| 日韩黄色一级片| 一区二区三区精品视频在线| 久久久不卡网国产精品二区| 欧美日韩亚洲综合| 色狠狠av一区二区三区| 不卡一区二区中文字幕| 久久不见久久见免费视频7| 一个色综合网站| |精品福利一区二区三区| 国产情人综合久久777777| 日韩女同互慰一区二区| 日韩欧美激情一区| 日韩午夜三级在线| 911精品国产一区二区在线| 欧美挠脚心视频网站| 色天天综合久久久久综合片| 99国产精品国产精品毛片| 国产一区久久久| 丁香啪啪综合成人亚洲小说| 激情深爱一区二区| 国产成人免费在线| 成人免费电影视频| 色噜噜狠狠色综合中国| 欧洲日韩一区二区三区| 色老综合老女人久久久| 欧美久久久久久久久| 精品三级av在线| 在线91免费看| 91麻豆精品国产91久久久更新时间 | 国产一区二区伦理| 国产jizzjizz一区二区| 97国产一区二区| 91麻豆精品国产自产在线观看一区| 日韩一区二区三区四区五区六区| 久久婷婷国产综合精品青草| 国产日韩欧美在线一区| 亚洲午夜在线视频| 国产高清久久久久| 欧美肥大bbwbbw高潮| 国产欧美日韩激情| 日韩av不卡一区二区| 91麻豆精品视频| 久久精品无码一区二区三区| 一区二区三区在线免费播放 | 午夜欧美视频在线观看| 粗大黑人巨茎大战欧美成人| 7777精品伊人久久久大香线蕉超级流畅 | 国产欧美精品一区| 五月激情丁香一区二区三区| av中文字幕不卡| 国产午夜亚洲精品理论片色戒 | 国内一区二区在线| 欧美aaaaa成人免费观看视频| 成人午夜又粗又硬又大| 欧美色倩网站大全免费| 视频一区欧美日韩| 亚洲人成精品久久久久久| 日韩欧美不卡在线观看视频| 韩国女主播一区| 亚洲电影视频在线| 国产免费观看久久| 欧美电影免费提供在线观看| 色素色在线综合| av动漫一区二区| 国产一区二区三区四区五区美女| 亚洲欧美另类久久久精品| 久久这里只有精品首页| 欧美一区二区女人| 制服.丝袜.亚洲.中文.综合| 成人小视频在线观看| 国内精品伊人久久久久av影院 | 国产夜色精品一区二区av| 91精品国产色综合久久不卡电影| 一本久久a久久免费精品不卡| 成人综合在线网站| jlzzjlzz亚洲日本少妇| 国产a区久久久| 99麻豆久久久国产精品免费 | 亚洲综合一区二区| 亚洲综合激情网| 亚洲国产成人av网| 日日摸夜夜添夜夜添亚洲女人| 亚洲综合一区在线| 日韩成人午夜电影| 精品一区二区免费看| 午夜一区二区三区在线观看| 亚洲与欧洲av电影| 美日韩一级片在线观看| 国内成人自拍视频| 国产成人免费高清| 色婷婷av一区二区| 日韩免费在线观看| 欧美国产成人在线| 亚洲精品videosex极品| 婷婷开心久久网| 波多野结衣在线一区| 91成人免费网站| 2017欧美狠狠色| 亚洲精品水蜜桃| 久久99久久99小草精品免视看| 成人黄色av电影| 欧美tickle裸体挠脚心vk| 国产精品成人免费|