无法多次覆盖jQuery UI自动完成的renderItem方法

8

它只在第一个自动完成中正确覆盖,但对其余部分无作为。相反,它加载了您可以在https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.autocomplete.js#L449查看的原始_renderitem方法。

$(".someClassWithMultipleItemsOnDOM").autocomplete({
        delay:500,
        minLength:2,
        source:path"
        .....   
}).data( "autocomplete" )._renderItem = function( ul, item ) {

感谢您的提前帮助。
2个回答

19

有一个解决此问题的方法:

var autoc = {
    delay: 500,
    minLength: 2,
    source: path,
    .....   
};

var renderItem = function (ul, item) {
    return $("<li></li>")
        .data("item.autocomplete", item)
        .append("<a>" + item.label + "<br/>" + item.desc + "</a>")
        .appendTo(ul);
};

$(".someClassWithMultipleItemsOnDOM").each(function (i) {
     $(this).autocomplete(autoc).data("autocomplete")._renderItem = renderItem;
}

2
这是一个JavaScript对象字面量。显然,为了使此示例正常工作,您必须删除“....”和最后一个逗号。 - tomc
1
@tomc - 你刚刚为我节省了数小时的额外工作时间。jquery-ui 的开发人员现在知道需要为多个自动完成元素提供解决方法吗? - DevlshOne

10
你可以重写_renderItem。
$.ui.autocomplete.prototype._renderItem = function (ul, item) { ... };

建议这样做吗? - Rafael Gomes Francisco
1
这是一种方法。既不推荐也不不推荐。 - Damax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接