2013-03-02 16 views
12

używam jQuery select2 wtyczki w celu pobrania kodu pocztowego za pomocą dostarczonego funkcji zwrotnej ajax w następujący sposób:Prawidłowe wykorzystanie jQuery select2 za initSelection zwrotnego z danymi odległych

$(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 
         }; 
        }) 
       }; 
      } 
     } 
    }); 
}); 

Raz dwa kody pocztowe są wybrane zostanę otrzymany hidden input w DOM:

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

problem mam to, że gdy formularz zostanie ponownie wyświetlony (na przykład w przypadku niektórych innych kontroli będących w błąd), pozycje (czyli dwa kody pocztowe, a zwłaszcza text) d nie wyświetlają się w formie, chociaż hidden input ma dwie wartości (tj. 4797 i 4798, które są id s dla kodu pocztowego).

Nie jestem pewien, czy muszę wykonać kolejną podróż w formacie ajax, gdy formularz zostanie wyświetlony ponownie lub czy jest lepszy sposób.

Czy ktoś może doradzić?

Odpowiedz

25

Metoda initSelection musi przekazać wartości, które muszą być obecne w select2

Ex:

$("#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']); 

Demo: Fiddle

+2

Dzięki za odpowiedź. Umm ... Problem polega na tym, że po przesłaniu formularza i ponownym wyświetleniu (z powodu innego błędnego pola), straciłem zmienną 'text' (nadal jest po stronie serwera). .). Czy widzisz mój punkt widzenia? – balteo

+0

dlaczego to nie działa, gdy wiele w zestawie do fałszu? Oczywiście używałbyś tylko jednego obiektu danych itp. – HGPB

+1

Czy na końcu musisz ponownie podać wartości? – Sebastialonso

Powiązane problemy