JQuery.UI類庫AutoComplete 調用WebService進行模糊查詢

JQuery.UI類庫AutoComplete 調用WebService進行模糊查詢javascript

1.介紹jQuery.UI中autocomplete參數介紹。php

此語法引用於:css

http://www.jb51.net/article/24219.htm

  

語法: autocomplete(urlor data, [options] ) 參數: url or data:數組或者url [options]:可選項,選項解釋以下: 1) minChars (Number) 在觸發autoComplete前用戶至少須要輸入的字符數,Default:1,若是設爲0,在輸入框內雙擊或者刪除輸入框內內容時顯示列表。 2) width (Number) 指定下拉框的寬度,Default: input元素的寬度 3) max (Number) autoComplete下拉顯示項目的個數,Default: 10 
4) delay (Number) 擊鍵後激活autoComplete的延遲時間(單位毫秒),Default: 遠程爲400 本地10 5) autoFill (Boolean) 要不要在用戶選擇時自動將用戶當前鼠標所在的值填入到input框,Default: false 
6) mustMatch (Booolean) 若是設置爲true,autoComplete只會容許匹配的結果出如今輸入框,全部當用戶輸入的是非法字符時將會得不到下拉框,Default:false 
7) matchContains (Boolean) 決定比較時是否要在字符串內部查看匹配,如ba是否與foo bar中的ba匹配.使用緩存時比較重要.不要和autofill混用.Default: false 
8) selectFirst (Boolean) 若是設置成true,在用戶鍵入tab或return鍵時autoComplete下拉列表的第一個值將被自動選擇,儘管它沒被手工選中(用鍵盤或鼠標).固然若是用戶選中某個項目,那麼就用用戶選中的值. Default: true 
9) cacheLength (Number) 緩存的長度.即對從數據庫中取到的結果集要緩存多少條記錄.設成1爲不緩存.Default: 10 
10) matchSubset (Boolean) autoComplete可不可使用對服務器查詢的緩存,若是緩存對foo的查詢結果,那麼若是用戶輸入foo就不須要再進行檢索了,直接使用緩存.一般是打開這個選項以減輕服務器的負擔以提升性能.只會在緩存長度大於1時有效.Default: true 
11) matchCase (Boolean) 比較是否開啓大小寫敏感開關.使用緩存時比較重要.若是你理解上一個選項,這個也就不難理解,就比如foot要不要到FOO的緩存中去找.Default: false 
12) multiple (Boolean) 是否容許輸入多個值即屢次使用autoComplete以輸入多個值. Default:false 
13) multipleSeparator (String) 若是是多選時,用來分開各個選擇的字符. Default:"," 
14) scroll (Boolean) 當結果集大於默認高度時是否使用卷軸顯示 Default: true 
15) scrollHeight (Number) 自動完成提示的卷軸高度用像素大小表示 Default: 180 
16) formatItem (Function) 爲每一個要顯示的項目使用高級標籤.即對結果中的每一行都會調用這個函數,返回值將用LI元素包含顯示在下拉列表中.Autocompleter會提供三個參數(row, i, max): 返回的結果數組, 當前處理的行數(即第幾個項目,是從1開始的天然數), 當前結果數組元素的個數即項目的個數.Default: none, 表示不指定自定義的處理函數,這樣下拉列表中的每一行只包含一個值. 17) formatResult (Function) 和formatItem相似,但能夠將將要輸入到input文本框內的值進行格式化.一樣有三個參數,和formatItem同樣.Default: none,表示要麼是隻有數據,要麼是使用formatItem提供的值. 18) formatMatch (Function) 對每一行數據使用此函數格式化須要查詢的數據格式. 返回值是給內部搜索算法使用的. 參數值row 19) extraParams (Object) 爲後臺(通常是服務端的腳本)提供更多的參數.和一般的做法同樣是使用一個鍵值對對象.若是傳過去的值是{ bar:4 },將會被autocompleter解析成my_autocomplete_backend.php?q=foo&bar=4 (假設當前用戶輸入了foo). Default: {} 20) result (handler) Returns:jQuery 此事件會在用戶選中某一項後觸發,參數爲: event: 事件對象. event.type爲result. data: 選中的數據行. formatted:formatResult函數返回的值 例如: $("#singleBirdRemote").result(function(event, data, formatted){ //如選擇後給其餘控件賦值,觸發別的事件等等 
}); 

2.準備的jQuery和jQuery.UI版本信息html

<link type="text/css" rel="stylesheet" href="Content/themes/base/all.css" />
    <script type="text/javascript" src="Scripts/jquery-1.10.2.js"></script>
    <script type="text/javascript" src="Scripts/jquery-ui-1.11.4.js"></script>

 

 

事件說明:java

 

jQuery UI Autocomplete有一些事件,可用於在一些階段進行額外的控制:

create(event, ui):Autocomplete建立時,能夠在此事件中,對外觀進行一些控制
search(event, ui): 在開始請求以前,能夠在此事件中返回false來取消請求
open(event, ui):Autocomplete的結果列表彈出時
focus(event, ui):Autocomplete的結果列表任意一項得到焦點時,ui.item爲得到焦點的項
select(event, ui):Autocomplete的結果列表任意一項選中時,ui.item爲選中的項
close(event, ui):Autocomplete的結果列表關閉時
change(event, ui):當值改變時,ui.item爲選中的項

 

 

 

3.準備被調用的WebService代碼jquery

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Script.Serialization;

/// <summary>
/// WebService 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要容許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消註釋如下行。 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    public WebService () {

        //若是使用設計的組件,請取消註釋如下行 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string GetItem(string item)
    {
        string result = "";
        try
        {
            List<Product> list = new List<Product>();
            string[] array1 = { "A","B","C","D","1","2","3","4","5"};
            string[] array2 = { "PH880","PA962","TSC462","105SL",
                                  "LP2404","RH767","MS340","DSX81","NWA11001"};
            for (int i = 1; i < 120; i++)
            {
                int index=i%9;
                string code="LP"+array1[index];
                string name=array2[index]+"--"+i.ToString().PadLeft(3,'0');
                list.Add(new Product() { Code=code,Name=name});
            }
            item = item.ToUpper();
            var query = from n in list where n.Code.ToUpper().Contains(item) || n.Name.ToUpper().Contains(item) select n;

            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            result=javaScriptSerializer.Serialize(query.ToList());

        }
        catch 
        {

        }
        return result;
    }
    
}
public class Product 
{
    public string Code { get; set; }
    public string Name { get; set; }
}

4.jQuery.UI 中autocomplete調用WebService代碼ajax

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>JQuery類庫AutoComplete應用</title>
    <link type="text/css" rel="stylesheet" href="Content/themes/base/all.css" />
    <script type="text/javascript" src="Scripts/jquery-1.10.2.js"></script>
    <script type="text/javascript" src="Scripts/jquery-ui-1.11.4.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            var availableTags = ["C#", "C++", "Java", "JavaScript", "ASP", "ASP.NET", "JSP", "PHP", "Python", "Ruby"];

            var availableTagsJSON = [{ label: "C# Language", value: "C#" },{ label: "C++ Language", value: "C++" },
    { label: "Java Language", value: "Java" }, { label: "JavaScript Language", value: "JavaScript" },
    { label: "ASP.NET", value: "ASP.NET" }, { label: "JSP", value: "JSP" }, { label: "PHP", value: "PHP" },
    { label: "Python", value: "Python" }, { label: "Ruby", value: "Ruby" }];
            
            $("#txt_info1").autocomplete(
                {
                    source: availableTagsJSON
                });

            $("#txt_info2").autocomplete(
                {
                    minLength: 1,
                    source: function (request, response) {
                        $.ajax(
                            {
                                url:"WebService.asmx/GetItem",
                                datatype:"json",
                                data:"{'item': '"+ request.term + "' }",
                                type:"POST",
                                contentType: "application/json",
                                success:function (result) {
                                    var json = $.parseJSON(result.d);
                                  
                                    response($.map(json, function (data, index) {
                                        var obj = { label: data.Code + "--" + data.Name, value: data.Name };
                                        return obj;
                                    }))
                                },
                                error: function (XMLHttpRequest, textStatus, errorThrown) {
                                    alert(textStatus);
                                }
                            });
                    },
                    select: function (event, ui)
                    {
                        var array = ui.item.label.split("--");
                        $("#txt_code").val(array[0]);
                        $("#txt_id").val(array[2]);
                    }

                });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            請輸入查詢的值:<input id="txt_info1" type="text" />

            請輸入查詢的值:<input id="txt_info2" type="text" />
            <input id="txt_code" type="text" />
            <input id="txt_id" type="text" />
        </div>
    </form>
</body>
</html>

查看效果:算法

簡單調用效果:數據庫

調用WebService產生的效果json

選擇其中一項完成:

學習筆記本身參考網絡上前輩的內容寫的例子,歡迎指正。

相關文章
相關標籤/搜索