【问题标题】:Jquery UI Autocomplete- How to format results AND add button at end?Jquery UI Autocomplete-如何格式化结果并在最后添加按钮?
【发布时间】:2019-01-26 09:41:32
【问题描述】:

我已经弄清楚如何更改结果的格式:

https://github.com/salmanarshad2000/demos/blob/v1.0.4/jquery-ui-autocomplete/custom-html-in-dropdown.html

我已经想出了如何在结果底部添加一个链接:

Jquery Auto complete append link at the bottom

我不知道如何同时做到这两点。

我最接近的是以下:

$( "#search1" ).autocomplete({
            source: products,
          minLength: 3,
      select: function( event, ui ) {
                event.preventDefault();
       },
       focus: function(event, ui) {
                event.preventDefault();
            }
    }).data("ui-autocomplete")._renderItem = function(ul, item) {

        console.log(ul.content)
        var $div = $("<div></div>");

        $("<img style='height:76px;'>").attr("src", item.image).appendTo($div);
        $("<span></span>").text(item.label).appendTo($div);

        ($div).append( "<a href='https://google.com'>Click Me</a>" )

        return $("<li></li>").append($div).appendTo(ul);
            };

问题在于将链接添加到每个单独的返回结果,而不是将其猛烈撞击到列表的末尾。

我尝试了各种包装链接的方式(li、div 等),但没有任何效果。

我需要做什么才能将链接作为列表中的最后一件事?

JS 小提琴:http://jsfiddle.net/spgbq6w7/13/

【问题讨论】:

    标签: jquery-ui autocomplete


    【解决方案1】:

    考虑下面的代码。

    工作示例:http://jsfiddle.net/Twisty/wur8vok9/23/

    HTML

    Search: <input id="search1">
    

    JavaScript

    var products = [{
        value: "MS-Word",
        label: "Microsoft Word 2013",
        image: "https://upload.wikimedia.org/wikipedia/commons/4/4f/Microsoft_Word_2013_logo.svg"
      },
      {
        value: "MS-Excel",
        label: "Microsoft Excel 2013",
        image: "https://upload.wikimedia.org/wikipedia/commons/8/86/Microsoft_Excel_2013_logo.svg"
      },
      {
        value: "MS-Outlook",
        label: "Microsoft Outlook 2013",
        image: "https://upload.wikimedia.org/wikipedia/commons/0/0b/Microsoft_Outlook_2013_logo.svg"
      },
      {
        value: "MS-PowerPoint",
        label: "Microsoft Word 2013",
        image: "https://upload.wikimedia.org/wikipedia/commons/b/b0/Microsoft_PowerPoint_2013_logo.svg"
      },
      {
        value: "MS-Access",
        label: "Microsoft Access2013",
        image: "https://upload.wikimedia.org/wikipedia/commons/3/37/Microsoft_Access_2013_logo.svg"
      },
      {
        value: "Adobe-PSP",
        label: "Adobe Photoshop CC",
        image: "https://upload.wikimedia.org/wikipedia/commons/a/af/Adobe_Photoshop_CC_icon.svg"
      },
      {
        value: "Adobe-LR",
        label: "Adobe Lightroom CC",
        image: "https://upload.wikimedia.org/wikipedia/commons/5/56/Adobe_Photoshop_Lightroom_Classic_CC_icon.svg"
      },
      {
        value: "Adobe-PRM",
        label: "Adobe Premiere Pro CC",
        image: "https://upload.wikimedia.org/wikipedia/commons/5/58/Adobe_Premiere_Pro_CS6_Icon.png"
      },
      {
        value: "Adobe-ACR",
        label: "Adobe Acrobat",
        image: "https://upload.wikimedia.org/wikipedia/commons/0/0b/Adobe_Acrobat_v8.0_icon.svg"
      },
      {
        value: "Adobe-ILS",
        label: "Adobe Illustrator CS6",
        image: "https://upload.wikimedia.org/wikipedia/commons/d/d8/Adobe_Illustrator_Icon_CS6.png"
      }
    ];
    
    $(function() {
      $("#search1").autocomplete({
        source: products,
        minLength: 3,
        open: function() {
          var $li = $("<li>");
          var $link = $("<a>", {
            href: "#",
            class: "see-all"
          }).html("See All Results").click(function(e) {
            e.preventDefault();
            $("#search1").autocomplete("option", "minLength", 0);
            $("#search1").autocomplete("search", "");
          }).appendTo($li);
          $li.appendTo($('.ui-autocomplete'));
        },
        select: function(event, ui) {
          event.preventDefault();
          $("#search1").autocomplete("option", "minLength", 3);
        },
        focus: function(event, ui) {
          event.preventDefault();
        }
      }).data("ui-autocomplete")._renderItem = function(ul, item) {
        console.log(ul.content)
        var $div = $("<div>").css("position", " relative");
    
        $("<img>", {
          src: item.image
        }).css("height", "38px").appendTo($div);
        $("<span>").css({
          position: "absolute",
          top: 0,
          display: "inline-block",
          "margin-left": "3px"
        }).text(item.label).appendTo($div);
    
        return $("<li>").append($div).appendTo(ul);
      };
    });
    

    所以你正确地使用了_renderItem()。我根据您链接到的示例从此处删除了链接。如示例所示,我将其移至 open 回调。我还切换了你的一些代码。没有错,我只是更喜欢这种方法。

    因此项目被渲染,以便图像和标签按需要显示。 open 回调添加了一个最终链接项目,导致搜索所有项目。查看更多:http://api.jqueryui.com/autocomplete/#method-search

    可以使用空字符串和minLength: 0 调用以显示所有项目。

    选择一个项目时,会返回首选的minLength,以确保如果用户开始新的搜索,它的操作方式与第一次相同。

    更新

    http://jsfiddle.net/Twisty/wur8vok9/40/

    轻微的清理和更好的代码和样式分离。

    希望这会有所帮助。

    【讨论】:

    • 这行得通,但我必须做一些改变——最重要的是改变这里的“点击”功能:}).html(“查看所有结果”).click(function(e) { 正如你写的那样,它调用了内置搜索并显示了更多数据——我真正想要的是用搜索词打开一个新页面。我保留了 e.preventDefault(); 在那里覆盖基本处理,然后使用 window.location 到达正确的页面。这不是最干净的东西,但它正在工作。现在弄清楚为什么背景颜色不会改变:)
    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多