【问题标题】:Materialize css dropdown in input field issue在输入字段问题中实现 css 下拉列表
【发布时间】:2019-05-28 13:36:26
【问题描述】:

当用户在输入字段中输入他们的查询时,我的项目需要自动建议。我尝试使用 ma​​terialize CSS、Ajax、Django、Jquery 实现如下:

HTML 页面:

 <div class="row" id ="adddiv"> 
        <div class="input-field col s3">
          <input placeholder="Stock Item" type="text" name="StockItem-1" class="validate dropdown-trigger" data-target="dropdown1" id="stockitem">
          <ul id="dropdown1" class="dropdown-content">
          </ul>
        </div>

JS 片段:

$(function(){
  // $("#stockitem").change(function(){
    $('.dropdown-trigger').keyup(function(){
    $('.dropdown-content').html("")
    var query = $('.dropdown-trigger').val();
    var data = {'query':query}
    var url = 'auto_suggest'
    $.ajax({
     type: "GET",
     url: url,
     dataType : 'json',
     data: data,
     contentType: 'application/x-www-form-urlencoded;charset=utf-8',
     success: function(data)
     {
      var results = data["resultlist"]
      $.each(results, function(index,value){
          $('.dropdown-content').append("<li>"+ value +"</li>");
        });

    }
  });
  });
});
  • 我能够从后端获取数据,并且 li 元素附加了选定的 ul 元素,但它没有在前端显示为下拉列表。
  • 参考materialize CSS dropdown
  • 我怀疑 CSS 有问题,请在这里

【问题讨论】:

    标签: javascript jquery ajax materialize


    【解决方案1】:

    你不应该使用下拉菜单,你应该使用自动完成

    https://materializecss.com/autocomplete.html

    还记得调用初始化函数,因为这就是您当前缺少的函数。通过以下修改,它应该可以工作。但同样,您应该为此使用自动完成功能。

    $(function(){
    
        ///////////////////////////////////////////////
        // YOU HAVE TO INITIALIZE THE DROPDOWN
        const dropDownEl = $('.dropdown-trigger')[0]
        M.Dropdown.init(dropDownEl)
        ///////////////////////////////////////////////////
    
      // $("#stockitem").change(function(){
        $('.dropdown-trigger').keyup(function(){
        $('.dropdown-content').html("")
        var query = $('.dropdown-trigger').val();
        var data = {'query':query}
        var url = 'auto_suggest'
        $.ajax({
         type: "GET",
         url: url,
         dataType : 'json',
         data: data,
         contentType: 'application/x-www-form-urlencoded;charset=utf-8',
         success: function(data)
         {
          var results = data["resultlist"]
          $.each(results, function(index,value){
              $('.dropdown-content').append("<li>"+ value +"</li>");
            });
            
        ///////////////////////////////////////////////
        // YOU HAVE TO OPEN THE DROPDOWN
        M.Dropdown.getInstance(dropDownEl).open();
        ///////////////////////////////////////////////////
    
        }
      });
      });
    });

    【讨论】:

    • 我可以根据您的回答通过替换下拉类来使用自动完成吗?
    • 我不确定我是否理解这个问题。但根据您的 HTML,您将删除 UL 元素并在 INPUT 元素上创建自动完成功能。您仍然需要根据文档初始化自动完成功能,并在获得下拉列表的新数据时在 AJAX 调用 updateData() 中。
    • 我也尝试使用自动完成功能,但找不到通过 ajax 获取列表的选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多