2013-03-02 25 views
12

使用jQuery選擇2插件才能使用提供AJAX回調函數如下檢索郵政編碼:jQuery的選擇2的initSelection回調的正確使用和遠程數據

$(document).ready(function() { 
    $("#postcodes").select2({ 
     placeholder : "Search for a postcode", 
     multiple : true, 
     minimumInputLength : 3, 
     ajax : { 
      url : "/bignibou/utils/findGeolocationPostcodeByPostcodeStartingWith.json", 
      dataType : 'json', 
      data : function(term) { 
       return { 
        postcode : term 
       }; 
      }, 
      results : function(data) { 
       console.log(data); 
       return { 
        results : $.map(data, function(item) { 
         return { 
          id : item.id, 
          text : item.postcode 
         }; 
        }) 
       }; 
      } 
     } 
    }); 
}); 

曾有兩位郵政編碼選擇在我得到的產生hidden input在DOM:

<input type="hidden" class="bigdrop select2-offscreen" id="postcodes" style="width:600px" name="familyAdvertisement.postcodes" value="4797,4798" tabindex="-1"> 

我的問題是,一旦表單重新(例如在一些其他控件是錯誤的情況下),這些選擇(即兩個郵政編碼,特別是text)d儘管hidden input確實具有兩個值(即, 4797和4798,這是郵政編碼的id)。

我不確定當表單重新顯示或者有更好的方法時我是否必須做另一次ajax往返。

任何人都可以請指教?

回答

25

的initSelection方法必須通過其必須存在於select2

實施例中的值:

$("#postcodes").select2({ 
    placeholder : "Search for a postcode", 
    multiple : true, 
    minimumInputLength : 1, 
    data:[], 
    initSelection : function (element, callback) { 
     var data = [{id:1,text:'bug'},{id:2,text:'duplicate'}]; 
     callback(data); 
    } 
}).select2('val', ['1', '2']); 

演示:Fiddle

+2

感謝您的答覆。嗯...我遇到的問題是,一旦表單被提交併重新顯示(因爲另一個字段出錯),我已經丟失了'text'變量(它仍然在服務器端.. )。你看到我的觀點了嗎? – balteo 2013-03-02 13:18:21

+0

爲什麼這不起作用時,多個設置爲false?當然,你只會使用一個數據對象等。 – HGPB 2014-02-16 15:31:07

+1

你是否必須在最後要求值? – Sebastialonso 2014-03-04 01:35:23