【问题标题】:Binding jquery AutoComplete dropdown list to menu items将 jquery AutoComplete 下拉列表绑定到菜单项
【发布时间】:2020-07-05 03:43:48
【问题描述】:

如第一张图片所示,有一个下拉列表数据。一旦我单击列表中的一项,它就不会与侧边栏左侧菜单列表绑定。我想让它如第二张图片所示。单击后,它应该搜索菜单列表并找到一个。但是我使用下面的代码并想知道是否有 Jquery 的功能可以做到这一点。

注意:它以某种方式与谷歌自动完成功能一起使用。

   $(document).ready(function () {
    $("#leftMenuSearch").autocomplete({
      source: list,
      minLength: 0,
      select: function (event, ui) {
        // that's how get the menu reference:
      }
    }).click(function () {
      console.log("this", this)
      $(this).autocomplete('search', "");
    });
  });

第一张照片

第二张图片

【问题讨论】:

  • 听起来您想过滤现有列表而不是创建自动完成列表。
  • @Twisty 是的,我已经创建了一个自动完成列表。但是它不与过滤器协作。当我在自动完成列表中选择一个项目时,过滤器不起作用。
  • 请提供一个最小的、可重现的例子:stackoverflow.com/help/minimal-reproducible-example

标签: jquery jquery-ui autocomplete menuitem jquery-ui-autocomplete


【解决方案1】:

很确定您想要的是过滤器而不是自动完成功能。

示例:https://jsfiddle.net/Twisty/Lu57qpxh/11/

JavaScript

$(function() {
  function filterTable(tbl, term) {
    $("tbody tr", tbl).show();
    $("tbody tr", tbl).each(function(i, r) {
      if ($("td:eq(0)", r).text().toLowerCase().indexOf(term) < 0) {
        $(r).hide();
      }
    });
  }

  $("#txtsearch").keyup(function() {
    var t = $(this).val().toLowerCase();
    filterTable($("table"), t);
  });
});

这会根据搜索词显示或隐藏表格中的项目。

更新

如果您想将其与自动完成一起使用,您可以这样做。

示例:https://jsfiddle.net/Twisty/Lu57qpxh/22/

$(function() {
  function filterTable(tbl, term) {
    $("tbody tr", tbl).show();
    $("tbody tr", tbl).each(function(i, r) {
      if ($("td:eq(0)", r).text().toLowerCase().indexOf(term.toLowerCase()) < 0) {
        $(r).hide();
      }
    });
  }

  $("#txtsearch").autocomplete({
    source: ["Spiderman", "Wonder", "hata"],
    select: function(e, ui) {
      filterTable($("table"), ui.item.value);
    }
  }).keyup(function() {
    if ($(this).val() == "") {
      $("table tbody tr").show();
    }
  });
});

【讨论】:

  • 您删除了自动完成功能。是的,过滤应该在那里,但是我想将自动完成列表与过滤一起使用。
  • 谢谢。我试图让它适用于我的代码,但是我有 div 而不是 table-td -tr,就像 &lt;div class=​"objectText" style=​"display:​ none;​"&gt;​Çalışanlar​&lt;/div&gt;​ 我无法达到与 'çalışanlar' 相等
  • 我试过 $("ul li a div", tbl).show(); $("ul li a div", tbl).each(function (i, r) { if ($("div:eq(0)", r).text().toLowerCase().indexOf(term.toLowerCase()) &lt; 0) { console.log("div",r); console.log("toLowerCase",$("div:eq(0)", r).text().toLowerCase().indexOf(term.toLowerCase())); $(r).hide(); } }); 因为它是线性的,就像 ul-li-a-div @Twisty
  • @chatay 我建议您自己多看看。如果您仍然有问题,可以发布一个新问题。
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多