【问题标题】:Appending an item to a jQuery UI autocomplete将项目附加到 jQuery UI 自动完成
【发布时间】:2011-08-08 00:53:24
【问题描述】:

目前,我在引用 ASHX 文件的文本框上使用 jQuery UI 自动完成功能。

一切正常,除了我想在列表末尾附加一个项目,上面写着:“找不到项目?单击此处请求添加新项目。”

我尝试了以下代码行,但它所做的只是格式化项目,我无法追加。

data( "catcomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
            .data( "item.catcomplete", item )
            .append( $( "<a class='ui-menu-item'></a>" ).text( item.label ) )
            .appendTo( $('ul').last('.autocomplete-category'));
    };

提示?提示?非常感谢! :D

【问题讨论】:

    标签: jquery user-interface autocomplete append


    【解决方案1】:

    您应该在Open event 触发后添加额外的条目。这将使您能够访问列表,这是您所追求的,而不是访问每个元素,这是 _renderItem 允许您访问的内容。

    这是一个示例,对已填充到列表中的条目进行样式设置:

    $("#myBox").autocomplete({
            source: "[URL]",
            minLength: 2,
            open: function(event, ui) {
                $("ul.ui-autocomplete.ui-menu .ui-menu-item:odd").css("background-color","#dedede");
            }
        });
    

    【讨论】:

    • 非常感谢!我会玩弄它的。到目前为止,我做了以下事情:open: function (event, ui) { //$("ul.ui-autocomplete.ui-menu .ui-menu-item:odd").css("background-color", "#dedede"); var url = "Can't find the item? Request to add a &lt;a href='javascript:void();' onclick='alert(\'TEST\');'&gt;new&lt;/a&gt; item!"; $("ul.ui-autocomplete.ui-menu").append(url); } 看起来我可以将一个项目附加到列表的末尾,现在必须确保它是一个可点击的 URL。
    【解决方案2】:

    你不想摆弄_renderItem。那就是渲染一个项目的fn;它为建议列表中的每个项目调用一次。

    你想要做的是猴子补丁 _renderMenu 函数。 jQuery UI 1.8.6 中的原始定义是这样的:

    _renderMenu: function( ul, items ) {
        var self = this;
        $.each( items, function( index, item ) {
            self._renderItem( ul, item );
        });
    },
    

    其他版本的 jQuery UI 可能基本相同。

    在执行$.each 之后,修补此以添加您的额外项目。

    【讨论】:

    • 这看起来很脆弱。如果 UI 团队决定更新 _renderMenu 函数的工作方式,您需要更新自己的代码,因为 _renderMenu 不是公共 API 的一部分。
    • 是的,没错,这就是为什么它被称为 monkeypatching。有关该技术的更多详细信息,请参阅stackoverflow.com/questions/2435964/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2015-01-25
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多