2013-08-14 20 views
6

Ho un'istruzione if che ha più di 100 if diversi.Gestione di un'enorme istruzione IF in jQuery

al im minuto usando qualcosa di simile a questo ...

$('select').on("change",function(){ 
    if( $(this).val() === 'tennis') { 
     $('.sport').val('raquet'); 
    } 
    else if( $(this).val() === 'soccer') { 
     $('.sport').val('goal'); 
    } 
    if( $(this).val() === 'snooker') { 
     $('.sport').val('cue'); 
    } 
}); 

voglio costruire uno per le contee del Regno Unito, quindi se un utente seleziona 'London' nel menu a discesa, il campo successivo è popolato con il codice postale per Londra.

Il mio problema è comunque, potrei costruirlo come il mio esempio precedente, solo che sarebbe enorme.

È possibile avere una sorta di file xml per fare questo? o sarebbe possibile mettere ogni contea e il suo valore in un oggetto all'interno di un array e mirare in questo modo?

Tutto l'aiuto notevolmente è apprezzato, grazie

http://jsfiddle.net/4xQeX/

risposta

24

La soluzione più comune è quella di memorizzare le coppie di sport/oggetti come dati, perché è dati.

var tbl = { 
    tennis: 'raquet', 
    snooker: 'cue', 
    ... 
}; 

e quindi utilizzare questo semplice codice:

$('select').on("change", function(){ 
    var t = tbl[$(this).val()]; 
    if (typeof t === "string") $('.sport').val(t); 
}); 

È anche potrebbe prendere tbl da un file JSON separato (o semplicemente conservarla in un altro file JS) per la gestione più facile.

Supponendo che si desidera utilizzare un file JSON separato, chiamato things.json, il file potrebbe essere simile a questo:

{ 
    "tennis": "raquet", 
    "snooker":"cue", 
    ... 
} 

E il codice sarebbe questo:

var httpRequest = new XMLHttpRequest(); 
httpRequest.onreadystatechange = function() { 
    if (httpRequest.readyState === 4) { 
     if (httpRequest.status === 200) { 
      var tbl = JSON.parse(httpRequest.responseText); 
      $('select').on("change", function(){ 
       var t = tbl[$(this).val()]; 
       if (typeof t === "string") $('.sport').val(t); 
      }); 
     } 
    } 
}; 
httpRequest.open('GET', 'things.json?time='+Date.now()); 
httpRequest.send(); 
+1

Almeno uso hasOwnProperty, '__lookupGetter__' o' __proto__' è un nome comune per lo sport – Esailija

+0

@Esailija: 'hasOwnProperty' è molto lento (anche se probabilmente non importa qui). In alternativa si potrebbe sostituire 'if (t)' con 'if (typeof t === 'string')'. –

+1

Questi devono essere i 15 voti più alti mai ottenuti;) –