2017-06-05 123 views
0

_renderItem根本没有执行,用console.log尝试也没有打印任何消息。尝试使用“自动完成”,“自动完成”,“自动完成”属性没有希望。Jquery自动完成_renderItem不起作用

另外我无法理解“地图功能响应”的目的,所以禁用它。

$(document).ready(function() { 

myVars.shId = $('#dataVar').attr('sh-data'); 

///// search ////// http://jsbin.com/xavatajiku/edit?js,output 
console.log(myVars.shId); 
$('#name-list').autocomplete({ 

     source: function (request, response) { 
      $.ajax({ 
       url: myVars.czbUrl, 
       data: { searchText: request.term, maxResults: 10, shopId: myVars.shId }, 
       dataType: "json", 
       success: function (data) { 
        console.log(data); 
        /*response($.map(data, function (item) { 
         console.log(data); 
         return { 

          value: item.product_name, 
          avatar: item.pfimage_thumb, 
          rep: item.product_name, 
          selectedId: item.url 
         }; 
        }))*/ 
       } 
      }) 
     }, 
     select: function (event, ui) { 

          alert(ui.item ? ("You picked '" + ui.item.label) 
                 : "Nothing selected, input was " + this.value); 

      return false; 
     } 
    }).autocomplete("instance")._renderItem = function (ul, item) { 
     console.log('test'); 
     /*var inner_html = '<a><div class="list_item_container"><div class="image"><img src="' + item.pfimage_thumb + '"></div><div class="label"><h3> Reputation: ' + item.volume + '</h3></div><div class="description">' + item.product_name + '</div></div></a><hr/>'; 
     return $("<li></li>") 
       .data("ui-autocomplete-item", item) 
       .append(inner_html) 
       .appendTo(ul);*/ 
    }; 

HTML:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> 
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 

<h4>search:<input type="text" id="name-list" /></h4> 
+0

把你的'jquery-ui.js'放在'jquery.min.js'之后,并检查控制台是否有错误 – Curiousdev

+0

是的,就是这样,我把它放在这里,现在它已经更正了。 – user3369417

+0

你的'数据'是什么样的?您是否检查过它按预期交付?最有可能的'renderMenu'函数没有触发,因为'response()'回调没有收到任何信息 – blgt

回答

1

一些小的修正,你应该对你的方式:

例子:https://jsfiddle.net/Twisty/3gm3sfem/

的JavaScript

$(function() { 
    var myData = [{ 
    product_name: "Name 1", 
    pfimage_thumb: "thumb1.jpg", 
    url: "url1" 
    }, { 
    product_name: "Name 2", 
    pfimage_thumb: "thumb2.jpg", 
    url: "url2" 
    }, { 
    product_name: "Name 3", 
    pfimage_thumb: "thumb3.jpg", 
    url: "url3" 
    }]; 
    $('#name-list').autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
     url: "/echo/json/", 
     data: { 
      json: JSON.stringify(myData) 
     }, 
     dataType: "json", 
     type: "POST", 
     success: function(data) { 
      console.log(data); 
      response(data); 
     } 
     }) 
    }, 
    select: function(event, ui) { 
     alert(ui.item ? ("You picked '" + ui.item.label) : "Nothing selected, input was " + this.value); 
     return false; 
    } 
    }).autocomplete("instance")._renderItem = function(ul, item) { 
    console.log('test'); 
    var item = $('<div class="list_item_container"><div class="image"><img src="' + item.pfimage_thumb + '"></div><div class="label"><h3> Reputation: ' + item.volume + '</h3></div><div class="description">' + item.product_name + '</div></div>') 
    return $("<li>").append(item).appendTo(ul); 
    }; 
}); 

如果您的数据回来了,将它传递给response()以确保menmu得到渲染。你不需要<a>,因为select将被解雇。

+0

谢谢Twisty,我会对此进行修改并查看。还有一件事,我不想关闭项目的下拉选择。它应该呆在那里选择下一个选项。我的选择意味着点击addcart按钮,所以选择multiple应该被启用。 – user3369417

+0

然后选择应返回false以帮助保持菜单打开。或者考虑:http://jqueryui.com/autocomplete/#multiple – Twisty