2013-03-02 7 views
12

Ich benutze jQuery Select2-Plugin, um Postleitzahlen mit der mitgelieferten Ajax-Callback-Funktion abgerufen wird, wie folgt:Gemäßer Gebrauch von initSelection Rückruf jQuery select2 mit Remote-Daten

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

Nach zwei Postleitzahlen sind habe ich die resultierend hidden input in erhalten das DOM:

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

das Problem, das ich habe, ist, dass, sobald die Form (zum Beispiel im Fall von einigen anderen Kontrollen fehlerhaft sind) erneut angezeigt wird, wird die Auswahlen (dh die beiden Postleitzahlen und vor allem der text) d on't in der Form zeigen, obwohl die hidden input hat die beiden Werte (d. h. 4797 und 4798, die die id s für die Postleitzahl sind).

Ich bin mir nicht sicher, ob ich eine weitere Ajax-Rundreise machen muss, wenn das Formular erneut angezeigt wird oder ob es einen besseren Weg gibt.

Kann jemand bitte beraten?

Antwort

25

initSelection Die Methode hat die Werte passieren, die in der select2

Ex vorhanden sein muss:

$("#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

Danke für die Antwort. Umm ... Das Problem, das ich habe, ist, dass, sobald das Formular eingereicht und erneut angezeigt wird (weil ein anderes Feld zum Beispiel fehlerhaft ist), ich die Variable 'text' verloren habe (sie ist immer noch auf der Server-Seite .. .). Siehst du meinen Standpunkt? – balteo

+0

warum funktioniert das nicht, wenn multiple in false gesetzt ist? Natürlich würden Sie nur ein Datenobjekt usw. verwenden. – HGPB

+1

Müssen Sie die Werte am Ende noch einmal erfragen? – Sebastialonso