搜索建议(Searching Suggestion),已布置好样式

本文介绍了一种实现搜索建议功能的方法,通过异步请求展示匹配项。利用 AJAX 技术,在用户输入时即时反馈可能的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家应该都看到过 GOOGLE 的搜索建议,就是当我们在输入关键词时,GOOGLE 会根据我们目前已输入的字显示相关的关键字建议,这就是搜索建议,现在很多网站都实现该友好的功能,如 YAHOO、狗狗搜索等。

实现该功能的思路就是:
  1. 在关键字输入框里,当用户按键弹起时,发送输入框里的字符串到服务器。
  2. 服务器根据收到客户端发来的字进入匹配搜索
  3. 将匹配用户已输入字的记录回发到客户端
  4. 客户端收到服务端的响应,输出建议。

其实就是异步回发(AJAX)。

下面是一个实例,实例实现的是搜索 SQL Server 默认数据库 Northwind 表 Customers 字段 CustomerID,当用户要输入框输入字时,返回该字段值与用户输入的字开头匹配的记录,即 CustomerID LIKE '用户已输入的字%'。

样式已设置好,显示建议的行为绝对位置,所以该行不会显示网页上的内容。

文件名:WordSuggest.aspx

源码如下:

.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WordSuggest.aspx.cs" Inherits="WordSuggest" %>

<!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>
    
<style type="text/css">
    .CInput
{border:solid 1px gray;width:300px}
    #divSuggestions
{border:solid 1px gray;width:300px;background:#fff;visibility:hidden}
    #divSuggestions span
{display:block;padding:3px}
    
</style>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
    
<h1>搜索建议 DEMO</h1>
    
<span>http://www.code-studio.net </span>
    
<hr />
    
<table style="border-collapse:collapse;"><tr><td><asp:TextBox ID="txtInput" runat="server" CssClass="CInput" onkeyup="sendRqt(this)"></asp:TextBox>
    
<asp:Button ID="Button1" runat="server" Text="Submit" /></td></tr>
    
<tr style="position:absolute;"><td><div id="divSuggestions"></div></td></tr></table>
    
</div>
    
</form>
    
<script type="text/javascript">
    
var xhr;
    
var isIe=window.navigator.appName.indexOf("Netscape"== -1?true:false;

    
function $(sElmId){return document.getElementById(sElmId);}
    
function crtRqt(){
        
if(window.ActiveXobject)
            xhr
=new ActiveXObject("Microsoft.XMLHTTP");
        
else xhr=new XMLHttpRequest();
    }
    
function sendRqt(srcElm){
        
var sInput=srcElm.value;
        
if(sInput!=""){
            
var url="wordsuggest.aspx?t="+new Date().getTime()+"&w="+sInput;
            crtRqt();
            xhr.onreadystatechange
=hdlRsp;
            xhr.open(
"GET",url,true);
            xhr.send(
null);
        }
        
else $("divSuggestions").style.visibility="hidden";
    }
    
function hdlRsp(){
        
if(xhr.readyState==4&&xhr.status==200){
            
var rspText=xhr.responseText;
            
var oDiv=$("divSuggestions");
            
if(rspText!=""){
                
var arrRspText=xhr.responseText.split(',');
                
var sInnerHtml="";
                
for(var i=0;i<arrRspText.length;++i){
                    sInnerHtml
+="<span onmouseover='setStyle(this,true)' onmouseout='setStyle(this,false)'"
                                
+" onclick='setInput(this)'>"+arrRspText[i]+"</span>";
                }
                oDiv.innerHTML
=sInnerHtml;
                oDiv.style.visibility
="visible";
            }
            
else oDiv.style.visibility="hidden";
        }
    }
    
function setStyle(srcElm,bOver){
        srcElm.style.background
=bOver?"orange":"";
    }
    
function setInput(srcElm){
        $(
"<%=txtInput.ClientID %>").value=srcElm.innerHTML;
    }
    
</script>
</body>
</html>

.CS
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class WordSuggest : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
string strInput = string.IsNullOrEmpty(Request.QueryString["w"]) ? string.Empty : Request.QueryString["w"];
        
if (strInput.Trim().Length != 0)
        {
            Suggeste(strInput);
        }
    }

    
private void Suggeste(string originalStr)
    {
     
/* 搜索建议
      * 文件名: WordSuggest.aspx
      * 功能描述: 根据用户输入,在数据库 Northwind 的表 Customers 查找 CustomerID 字段值匹配的记录.
      
*/
        SqlConnection conn 
= new SqlConnection("data source=localhost;database=northwind;user id=sa;password=你的密码");
        
string cmdText = "SELECT TOP 10 CustomerID FROM Customers WHERE CustomerID LIKE @w";
        SqlParameter para 
= new SqlParameter("@w"string.Format("{0}%", originalStr));
        SqlCommand cmd 
= new SqlCommand();
        cmd.Connection 
= conn;
        cmd.CommandText 
= cmdText;
        cmd.Parameters.Add(para);
        conn.Open();
        SqlDataReader reader 
= cmd.ExecuteReader();
        System.Text.StringBuilder sb 
= new System.Text.StringBuilder();
        
while (reader.Read())
        {
            sb.AppendFormat(
"{0},", reader[0]);
        }
        reader.Close();
        conn.Close();
        Response.ContentType 
= "text/plain";
        Response.Clear();
        
if (sb.Length != 0)
        {
            Response.Write(sb.ToString().Remove(sb.Length 
- 1));
        }
        
else
        {
            Response.Write(
string.Empty);
        }
        Response.Flush();
        Response.Close();
    }
}
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值