2009-03-11 8 views
6

So che c'è un modo molto più elegante/efficiente di fare questo (in php vorrei usare foreach) ma con jQuery come posso camminare le coppie var/val di una risposta JSON e compilare i campi modulo con gli stessi id del i nomi dei campi nella risposta JSON?Risposta "JSON" "Walk" e compilazione di campi modulo: approccio più efficiente?

Qui è la mia risposta JSON:

[{"field":"svendor_name","value":"Vendor Name Inc."},{"field":"svendor_addr1","value":"1234 Vendor Lane."},{"field":"svendor_addr2","value":"Suite 100"},{"field":"svendor_city" 
,"value":"Vendorville"},{"field":"svendor_state","value":"CA"},{"field":"svendor_zip","value":"90210"},{"field" 
:"svendor_phone","value":"800-555-1234"}] 

Ecco il mio codice jQuery per popolare la forma:

$(document).ready(function() 
{ 
    $('#svendor_name').bind("change", function() 
    { 
     var svendor = $("#svendor_name").val(); 
     svendor = svendor.replace(/&/g, '*'); 
     $.getJSON("get_vendors.php?sname=" + svendor, 
     function(data) 
     { 
      $.each(data, 
       function(i, item) 
       { 
        if(item.field == "svendor_name") 
        { 
         $("#svendor_name").val(item.value); 
        } 
        else if(item.field == "svendor_addr1") 
        { 
         $("#svendor_addr1").val(item.value); 
        } 
        else if(item.field == "svendor_addr2") 
        { 
         $("#svendor_addr2").val(item.value); 
        } 
        else if(item.field == "svendor_city") 
        { 
         $("#svendor_city").val(item.value); 
        } 
        else if(item.field == "svendor_state") 
        { 
         $("#svendor_state").val(item.value); 
        } 
        else if(item.field == "svendor_zip") 
        { 
         $("#svendor_zip").val(item.value); 
        } 
        else if(item.field == "svendor_phone") 
        { 
         $("#svendor_phone").val(item.value); 
        } 
        else if(item.field == "svendor_id") 
        { 
         $("#svendor_id").val(item.value); 
        } 
      }); 
     }); 
    }); 
}); 

che tutte le opere belle e buone, ma ci tengo a evitare tutti i se/istruzioni else e basta usare i dati che ritornano dal metodo getJSON per determinare quali campi vengono popolati con quali valori. Qual è un approccio più pulito/più efficace a questo?

- Nicholas

risposta

21

È possibile liberarsi di tutti "if", sostituendo il tuo $ .each con questo:

$.each(data, function(i, item){ 
    $("#"+item.field).val(item.value); 
}); 
+0

eccellente risposta. Funziona perfettamente ed è esattamente quello che stavo cercando. Grazie. –

+8

Funziona bene finché tutti i campi sono campi di input. Ma per quanto riguarda le caselle combinate, le caselle di controllo e i pulsanti di opzione? Non c'è un buon plugin che si prende cura di questo? – bart

+0

Mi sto chiedendo la stessa cosa del barbo. –

7

Cosa c'è di sbagliato con questo?

$.each(data, 
    function(i, item) { 
     $("#" + item.field).val(item.value); 
    } 
}); 
+1

Non si comporta bene per le caselle di controllo e i pulsanti di opzione –

0

ho notato che gli ID degli elementi sono gli stessi campi nel JSON, come su:

$(document).ready(function() { 
    $('#svendor_name').bind("change", function() 
    { 
     var svendor = $("#svendor_name").val(); 
     svendor = svendor.replace(/&/g, '*'); 
     $.getJSON("get_vendors.php?sname=" + svendor, 
     function(data) { 
       $.each(data, function(i, item) { 
        $('#' + item.field).val(item.value); 
       }); 
     }); 
    }); 
}); 
3

Se i risultati aspetto:

[{"field1":"value1","field2":"value2"}] 

Poi il codice fornito da Lavoro di Seb e Chetan

$.each(data, function(i, item){ 
    $("#"+item.field).val(item.value); 
}); 

Se i risultati aspetto:

{"field1":"value1","field2":"value2"} 

quindi utilizzare questo codice

$.each(data, function(field, value){ 
    $("#"+field).val(value); 
}); 
+0

Troppo buono per una risposta sui campi diretti –

Problemi correlati