2012-12-19 9 views
7

In un menu a discesa, ho ciascuna opzione visualizzata come qui di seguito a titolo di esempio:Come visualizzare nome e cognome in input di testo separati?

scomp23 - Jack Turner

Ora, con questo codice qui sotto:

var text = $(this).find('option:selected').text(); 
var split = text.split(' - '); 
$('#currentAdminAlias').val(split[0]);  
$('#currentAdminForename').val(split[1]); 
$('#currentAdminSurname').val(split[2]); 

Quello che sto cercando di fare è di visualizzazione scomp23 nell'input di testo #currentAdminAlias (funziona correttamente), visualizzare nell'input di testo #currentAdminForename e visualizzare Turner nell'input di testo #currentAdminSurname.

Il problema che sto riscontrando è che visualizza sia il nome che il cognome solo nel testo #currentAdminForename.

Ora so perché questo accade ma la mia domanda è come posso visualizzare il nome e il cognome in input di testo separati?

risposta

2
 var text = $(this).find('option:selected').text(); 
     var split = text.split(' - '); 
     var names = split[1].split(' '); 
     $('#currentAdminAlias').val(split[0]);  
     $('#currentAdminForename').val(names[0]); 
     $('#currentAdminSurname').val(names[1]); 

Oppure si consideri allegando ciascuno dei valori che si desidera l'elemento opzione come un attributo di dati HTML 5. Che darebbe

 var element = $(this).find('option:selected'); 
     $('#currentAdminAlias').val(element.data('alias')); 
     $('#currentAdminForename').val(element.data('forename')); 
     $('#currentAdminSurname').val(element.data('surname')); 

Con un elemento di scelta del campione che sembra

 <option data-alias="scomp23" data-forename="Jack" data-surname="Turner"> 
      scomp23 - Jack Turner 
     </option> 
+0

Al momento questa applicazione ha a che fare solo con il nome e il cognome quindi dovrebbe andare bene con la tua risposta – Manixman

3
 var split = text.split(' '); 
     $('#currentAdminAlias').val(split[0]);  
     $('#currentAdminForename').val(split[2]); 
     $('#currentAdminSurname').val(split[3]); 
+0

accetterò risposta quando mi lascia. Posso fare una piccola domanda. Se ho un'opzione a discesa che è 'scomp22 - Andy Hall' e ho un'altra opzione che è' John Bailey-Smith', allora posso usare lo stesso codice sopra o devo cambiarlo un po '? – Manixman

+0

Se non si dispone sempre della stessa struttura per il testo dell'opzione, l'utilizzo degli attributi dei dati diventa molto utile, piuttosto che basarsi sull'analisi del testo dell'opzione. Vedi la mia risposta. – SamStephens

+0

No, non puoi. La divisione sul primo ti darà 4 risultati nell'array, ma la divisione sul secondo ti darà solo 2 voci. Se hai sempre il modulo [adminAlias] - [First] [Last] OR [First] [Last] allora puoi fare lo split nello spazio. Controlla la lunghezza dell'array. se la lunghezza è 2 allora 0 è il primo e 1 è l'ultimo. Se la lunghezza è 4, l'amministratore è 0, il primo è 2, l'ultimo è 3. –

Problemi correlati