【问题标题】:jquery 1.8.2 autocomplete + .live() + .create() , not working togetherjquery 1.8.2 自动完成 + .live() + .create() ,不能一起工作
【发布时间】:2014-08-06 17:54:38
【问题描述】:

我在一个 asp.net MVC Web 应用程序中工作,我使用的是 jQuery 版本 1.8.2 和 jQuery-ui 1.8.24。我有以下自动完成代码:-

$("#ServerTag,#SDTag,#FirewallTag,#RouterTag,#SwitchTag").live("focus.autocomplete", null, function () {
        var URL ="@Url.Content("~/Server/AutoComplete")";

        $(this).autocomplete({
            minLength: 1, delay: 1000,
            source: function (request, response) {
                $.ajax({
                    url: URL,
                    cacheLength:1,
                dataType: "json",

                data: {
                    term: request.term,
                    rackid: "@Model.Rack.TMSRackID.ToString()",
                    },
                success: function (data) {
                    response(data);
                },
                select: function (event, ui) {
                    return false;
                    },
                create: function () {
                    $(this).data("autocomplete")._renderItem = function (ul, item) {

                        return $('<li>').data('item.autocomplete', item).append('<a>' + '<b>' + item.label + '</b><br>' + '<span style="color: #737373;font-size: 12px;font-weight: 300;line-height: 16px;font-family: Helvetica,Arial,sans-serif;white-space: owrap;">' + item.resourcename + ' | ' + item.customername + ' | ' + item.sitename + '<hr style="padding: 0px; margin: 0px;">' + '</span></a>')
                                        .appendTo(ul);
                    };
                }
            });
        },

        });
    });

还有以下动作方法,它返回json:-

public ActionResult AutoComplete(string term,int? rackid)
        {

            var query = from techItems in ad
                        join resourcesItems in resources
                        on techItems.Technology.IT360ID.Value equals resourcesItems.RESOURCEID // join based on db2ID
                        orderby techItems.Technology.PartialTag
                        select new {  label = techItems.Technology.Tag.ToString(), customername = resourcesItems.ResourceLocation.SiteDefinition.AccountDefinition.ORG_NAME.ToString(), resourcename = resourcesItems.RESOURCENAME.ToString(), sitename = resourcesItems.ResourceLocation.SiteDefinition.SDOrganization.NAME };

            return Json(query, JsonRequestBehavior.AllowGet);


        }

我面临的问题是自动完成结果将只包含一个标签,而不是在创建部分中定义的连接字符串。

任何人都可以建议吗?,似乎我的 .create 没有任何效果。

谢谢

【问题讨论】:

    标签: javascript jquery jquery-ui autocomplete jquery-1.8


    【解决方案1】:

    我可以看到一个可能的问题是在您的配置中 createselect 选项被传递给 ajax 设置而不是自动完成......所以试试

    $("#ServerTag,#SDTag,#FirewallTag,#RouterTag,#SwitchTag").live("focus.autocomplete", null, function () {
        var URL = "@Url.Content("~ / Server / AutoComplete ")";
    
        $(this).autocomplete({
            minLength: 1,
            delay: 1000,
            source: function (request, response) {
                $.ajax({
                    url: URL,
                    cacheLength: 1,
                    dataType: "json",
    
                    data: {
                        term: request.term,
                        rackid: "@Model.Rack.TMSRackID.ToString()",
                    },
                    success: function (data) {
                        response(data);
                    }
                });
            },
            select: function (event, ui) {
                return false;
            },
            create: function () {}
        });
    
        //this should happen outside the ajax callback
        $(this).data("autocomplete")._renderItem = function (ul, item) {
            return $('<li>').data('item.autocomplete', item).append('<a>' + '<b>' + item.label + '</b><br>' + '<span style="color: #737373;font-size: 12px;font-weight: 300;line-height: 16px;font-family: Helvetica,Arial,sans-serif;white-space: owrap;">' + item.resourcename + ' | ' + item.customername + ' | ' + item.sitename + '<hr style="padding: 0px; margin: 0px;">' + '</span></a>')
                .appendTo(ul);
        };
    });
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • .live 仅在 jQuery 1.9 中被删除,所以在 jquery 1.8 中它应该可以正常工作
      • 我正在使用 jquery 1.8.2 ,并且自动完成部分工作......但 .create 部分似乎没有任何效果。
      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 2014-01-16
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多