用ajax和asp.net實現智能搜尋功能

來源:互聯網
上載者:User

近來一直在開發股票類比系統,終於告一段落了,回想起來感慨很多。突然想應該做點總結了,想來想去還是覺得通過寫點日誌來把相關的知識點記錄下來,下面就我在項目中經常用到的動態提示搜尋選項功能的實現。

第一步,先做好搜尋網頁面

 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" 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 src=JScript.js type="text/javascript" ></script>
    <style>
     #result{
 position:absolute;
 width:150px;
 height:auto;
 margin:0px;
 z-index:1;
 font-size:14px;
 border: 1px dashed #ccccc4;
 display:none;
}
#result .firstHang{
  background-color:#DDDDDD;
  height:15px;
  padding-top:5px;
}
#result  b{
 width:61px;
 float:left;
}
#result  nobr{
 width:61px;
 float:left;
}
#result .otherHang{
 background-color:#FFFFFF;
 height:15px;
  padding-top:5px;
}
#content{
  margin-left:0px;
  padding-left:0px;
}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div align=center style="padding-top:100px">
     <input id="searchTxt" onkeyUp="startRequest(this.value)" /> <!-- 輸入框 -->
    </div>
      <div id="result"  align="center">  <!-- 下拉搜尋方塊 -->
  <div class="firstHang">
     <b>搜尋</b><b>標題</b>
  </div>
  <div id="stockListDiv"></div>
   </div>
    </form>
</body>
</html>
<script language="javascript">
var obj=document.getElementById("result");
var rela=document.getElementById("searchTxt");
SetDivLocation(obj,rela);
function SetDivLocation(obj,rela)             //設定下拉搜尋方塊與輸入框的相對位置
{
   var   x,y;  
  var oRect=rela.getBoundingClientRect();   //獲得輸入框的位置
   x=oRect.left;
   y=oRect.top;
   obj.style.left=x+"px";                   //這裡要加上px,否則在fiexfox就會失效
   obj.style.top=y+rela.offsetHeight+"px";
}
</script>

 

第二步,添加返回搜尋結果的頁面,該頁面由於不用在用戶端顯示,所以就不用做介面。

Imports System.Text
Partial Class Search
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim searchContent As String = Request("content").ToString  '擷取搜尋內容

        Dim searchResult As New StringBuilder
        If IsNumeric(searchContent) Then                  '判斷是否為數字,輸入不同的內容
            searchResult.Append("<div class='otherHang'><nobr>11</nobr><nobr>11</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>22</nobr><nobr>22</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>22</nobr><nobr>22</nobr></div>")
        Else
            searchResult.Append("<div class='otherHang'><nobr>aa</nobr><nobr>aa</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>bb</nobr><nobr>bb</nobr></div>")
            searchResult.Append("<div class='otherHang'><nobr>cc</nobr><nobr>cc</nobr></div>")
        End If
        Response.Write(searchResult.ToString) '向用戶端發送結果
        Response.End()                                        '關閉用戶端輸出資料流
    End Sub
End Class

 

第三步就是最關鍵的一步了

// JScript 檔案
var xmlHttp;
function cratexmlHttpRequest()

    //判斷是否為IE瀏覽器
 if(window.ActiveXObject)
 {
     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 else if(window.XMLHttpRequest)
 {
     xmlHttp=new window.XMLHttpRequest();
 }
}
//啟動對頁面的請求
function startRequest(content)
{
   cratexmlHttpRequest();
 //佈建要求狀態變化調用的方法
 xmlHttp.onreadystatechange=handleState;
 //建立對伺服器的調用
 var url="Search.aspx?content="+escape(content); '發送頁面url
 xmlHttp.open("get",url,true);
 xmlHttp.send(null);
}
function handleState()
{
  try{
    if(xmlHttp.readyState==4)
 {
    if(xmlHttp.status==200)
  {
       var data=xmlHttp.responseText;    '得到搜尋結果
            var result=document.getElementById("result");
   var stockListDiv=document.getElementById("stockListDiv");
   if(data=="")            '如果搜尋結果為空白,不顯示下拉框
   {
   
     result.style.display="none";
           stockListDiv.innerHTML="";
   }
   else
   {
      stockListDiv.innerHTML=data;   '顯示下拉框

      result.style.display="block";
   }
  }
 
 }
 }
catch(error)
 {error.message}
}

最後實現的效果如下:

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.