2017-01-04 23 views
0

我正在使用JQuery(1.9.1)自動完成下拉列表。我希望用戶在下拉列表中輸入系統名稱,並在用戶添加字符時更新下拉列表。我也希望有一個默認值的「其他」總是出現在下拉的頂部,而不管用戶輸入什麼字符。這裏是它應該是什麼樣子的截圖:enter image description here讓JQuery自動完成始終顯示特定選項

這裏是我的Ajax調用爲:

 $.ajax({ 
 
       type: 'POST' 
 
       , url: '/test/get_BackendSystems' 
 
       , dataType: 'json' 
 
       , success: function (response) { 
 
        if (response.success) { 
 
         backend_systems = []; 
 
         $.each(response.backend_systems, function (id,system_object) { 
 
          backend_systems.push(system_object["system"]); 
 
         }); 
 
        } 
 
        $("#BackEnd").autocomplete({ 
 
         source: backend_systems, 
 
         open: function(){ 
 
          $(this).data("autocomplete").menu.element.addClass("backend_dropdown"); 
 
          $('.backend_dropdown').prepend('<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all ui-add-new" tabindex="-1">Other</a></li>'); 
 
          $('.backend_dropdown').width(432); 
 
         } 
 
        }); 
 
       } 
 
      } 
 
     );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

下面是相應的HTML:

      <div class='referral wrapper'> 
 
           <input list="POS_options" name="data[Account][backend_system]" type="text" class="required" placeholder="Back-End System" maxlength="150" id="BackEnd"> 
 
          </div>

下拉下來看起來我想要的方式,除非我從下拉列表中單擊「其他」我在鉻控制檯中出現此錯誤,並且「其他」不填充輸入文本框:「未捕獲TypeError:無法讀取屬性'數據「未定義」。點擊其他選項正常工作。

任何人都知道我做錯了什麼或有其他方法來獲得這種類型的下拉?我懷疑這個問題與自動完成與前置的交互有關,因爲除「其他」之外的所有選項都可以正常工作。如果除了jquery自動完成之外還有其他方法可以做到這一點,我也會公開嘗試。

+0

你有活頁面,所以我們可以看到和測試小部件嗎? –

+0

不幸的是我沒有。但我很確定這個問題與我如何預先加入「其他」有關,因爲下拉列表中的所有其他元素都沒有問題。 – dredbound

回答

1

我會嘗試在前面加上「其他」選項中,可以定義數組,像這樣:

$.ajax({ 
      type: 'POST' 
      , url: '/test/get_BackendSystems' 
      , dataType: 'json' 
      , success: function (response) { 
       if (response.success) { 
        backend_systems = ["Other"]; 
        $.each(response.backend_systems, function (id,system_object) { 
         backend_systems.push(system_object["system"]); 
        }); 
       } 
       $("#BackEnd").autocomplete({ 
        source: backend_systems, 
        open: function(){ 
         $(this).data("autocomplete").menu.element.addClass("backend_dropdown"); 
         $('.backend_dropdown').width(432); 
        } 
       }); 
      } 
     } 
    ); 

我也去掉了前置li元素

+0

我試過這個,雖然它確實刪除了修復我點擊「其他」時得到的錯誤,但它也會根據用戶輸入和其他選項來過濾「其他」。我試圖讓「其他」始終是下拉菜單中的第一個選項,無論輸入如何。 – dredbound

+0

好吧,你將不得不改變你的後端系統的源代碼,這是你返回你的json文件的腳本,你必須包含在'其他'..沒有其他方式我很害怕:| –