2013-03-02 12 views
12

Io uso jQuery select2 plug-in al fine di recuperare i codici postali utilizzando la funzione di callback ajax prevedeva quanto segue:utilizzo corretto dei initSelection callback jQuery select2 con dati remoti

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

una volta due codici postali vengono selezionati ho la conseguente hidden input in DOM:

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

il problema che ho è che una volta che il modulo è nuovamente visualizzato (ad esempio nel caso di alcuni altri controlli essendo in errore), le selezioni (cioè i due codici postali e soprattutto la text) d non viene mostrato nel modulo sebbene lo hidden input abbia i due valori (ad es. 4797 e 4798, che sono i id s per il codice postale).

Non sono sicuro di dover eseguire un altro round di andata ajax quando il modulo viene visualizzato di nuovo o se c'è un modo migliore per andare.

Qualcuno può consigliare?

risposta

25

Il metodo initSelection deve passare i valori che deve essere presente nel select2

Es:

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

Dimostrazione: Fiddle

+2

Grazie per la risposta. Umm ... Il problema che ho è che una volta che il modulo è stato inviato e viene nuovamente visualizzato (a causa di un altro campo in errore, ad esempio), ho perso la variabile 'text' (è ancora sul lato server). .). Capisci cosa intendo? – balteo

+0

perché questo non funziona quando multiplo in set su falso? Ovviamente useresti solo un oggetto dati, ecc. – HGPB

+1

Devi richiedere nuovamente i valori alla fine? – Sebastialonso

Problemi correlati