【问题标题】:Add a link to a JQueryUI autocomplete item添加指向 JQueryUI 自动完成项的链接
【发布时间】:2011-01-30 14:58:15
【问题描述】:

当用户开始在搜索框中输入内容时,建议页面会返回与该名称匹配的所有集合中的最新项目以及其他数据。

我想展示该项目(沿其图像),以及“查看此收藏中的所有项目”的链接。

我可以(大部分)用以下代码做到这一点:

$('#search').autocomplete({
    source: function (request, response) {
        $.ajax({
            url: suggesturl,
            dataType: 'json',
            data: request,
            success: function (data) {
                response(data.map(function (value) {
                    return {
                        'label': '<img src="' + value.thumbsmall + '" />' + value.name + '<a href="/">More items from this collection...</a>',
                        'value': value.fullname
                    };  
                }));
            }   
        }); 
    },  
    minLength: 3
})

问题是,虽然链接出现在框中,但当它被点击时,它会被忽略,并执行默认的select 操作(项目的value 被放入文本框中)。

【问题讨论】:

    标签: jquery jquery-ui autocomplete jquery-autocomplete


    【解决方案1】:

    似乎您有几个选择。首先,您可以使用自动完成初始化程序上的选择选项来指定您自己的选择操作。

    $(selector).autocomplete({
        source: ... ,
        select: function(value, data){
              if (typeof data == "undefined") {
                  emitMessage('You selected: ' + value + "<br/>");
              } else {
                  emitMessage('You selected: ' + data.item.value + "<br/>");
              }
        }
    });
    

    如果由于某种原因这还不够,那么您可以为自动完成列表呈现您自己的内容,并通过这种方式获得尽可能多的控制权。
    您可以通过猴子修补 _renderItem fn 来做到这一点,这是自动完成调用以呈现列表中的每个项目。检查this answer 了解如何操作。它适用于 v1.8rc3。

    我想在 _renderItem 中你可以渲染一个可点击的&lt;span&gt;,并将你喜欢的任何逻辑附加到点击事件。

    如果您走这条路,您可能需要关闭默认的点击操作。我认为自动完成对提供点击事件的元素使用&lt;a&gt;。在这种情况下,您需要取消设置该点击处理程序。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多