Tagit和自动完成功能

时间:2013-04-03 09:29:00

标签: jquery tag-it

这是代码:

$("#AddFriendToGroup").tagit({
                 autocomplete: { 
                    source: function (request, response) {
                        $.ajax({
                            type: 'POST',
                            url: 'ChatPageTest.aspx/tagFriendAutocomplete',
                            data: "{'ClientID':'" + $("#UserID").val() + "','ClientName': '" + request.term + "'}",
                            contentType: 'application/json; charset=utf-8',
                            dataType: 'json',
                            success: function (data) {
                            },
                            error: function (xhr) {
                                alert("responseText: " + xhr.responseText);
                            }
                        });
                    },
                        minLength: 2
                    }
                });

服务器端:

public static string tagFriendAutocomplete(int ClientID,string ClientName)
{
    string Result = "";
    string query = "select fr.FRIEND_ID,c.[USER_NAME] from clients c inner join friends fr on c.CLIENT_ID=fr.FRIEND_ID and fr.CLIENT_ID=" + ClientID + " and c.[USER_NAME] like '%" + ClientName + "%' ";

    DataTable dt = new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).getQueryResult(query);
    if (dt.Rows.Count > 0)
    { 
       for(int i=0;i<dt.Rows.Count;i++)
       {
           Result += dt.Rows[i]["FRIEND_ID"] + "," + dt.Rows[i]["USER_NAME"];
        }
    }

    return Result;
}

我很困惑我不知道什么是正确的代码放在ajax成功函数可以任何人帮助我如何使我的情况下tagit的自动完成功能工作,以显示由ajax调用产生的clientName

2 个答案:

答案 0 :(得分:2)

要获取有关在tagit中使用$ .ajax()的信息,请参阅How to get tagSource to work with $.ajax()

答案 1 :(得分:1)

这实际上有点棘手,我不记得在文档中看到了答案。

我所做的是以下内容:

$("#[id of tag to attach to]").tagit({
autocomplete: {
    source: function( request, response ) {
        if (acAjax && acAjax.readyState != 4)
            acAjax.abort();

        $("#loading").show();

        acAjax = $.ajax({
            url: [server url],
            dataType: "json",
            data: {
                term: request.term
            },
            success: function( data ) {
                returnedUsers = data;
                response( $.map( data, function( item ) {
                    return {
                        label: item,
                        value: item
                    }
                }));
            },
            error: function(xhr, status, error) {
                returnedUsers = [];
            },
            complete: function(xhr, status, error) {
                $("#loading").hide();
            }
        });
    },
    minLength: 2
},
allowSpaces: true,
beforeTagAdded: function(event, ui) {
    if ($.inArray(ui.tagLabel, returnedUsers)==-1)
        return false;
}
});

抱歉格式不正确。几个笔记:

  1. 成功'响应'功能 - 这是tagit理解的功能。我不完全确定它是如何工作的,但请注意,通过这种格式化,您可以让标签打印一件事(“标签”),并将值设置为其他值。

  2. 'returnedUsers'数组允许我阻止用户添加ajax未返回的标记。这有点难以理解,所以我希望这对你有所帮助。

  3. 其他选项列在文档中,所以我不会进入它们。希望这对你有所帮助。简单地指向文档是没有用的 - 我知道!