2017-06-05 119 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