2009-03-11 15 views
6

Wiem, że istnieje o wiele bardziej elegancki/skuteczny sposób robienia tego (w php użyłbym foreach), ale z jQuery, jak mogę chodzić parami var/val odpowiedzi JSON i wypełnić pola formularza o tych samych identyfikatorach, co nazwy pól w odpowiedzi JSON?"Walk" odpowiedzi JSON i wypełnianie pól formularzy - bardziej wydajne podejście?

Oto moja odpowiedź 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"}] 

Oto mój kod jQuery do wypełniania formularza:

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

To wszystko działa dobrze i dobre, ale naprawdę chcę, aby uniknąć cały jeśli/else instrukcje i po prostu użyj danych pochodzących z metody getJSON, aby określić, które pola zostaną wypełnione przez wartości. Co to jest czystsze/bardziej skuteczne podejście do tego?

- Nicholas

Odpowiedz

21

można pozbyć się wszystkich "czy" oświadczenia przez zastąpienie $ .each z tym:

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

doskonałą odpowiedź. Działa idealnie i jest dokładnie tym, czego szukałem. Dziękuję Ci. –

+8

Działa to dobrze, o ile wszystkie pola są polami wejściowymi. Ale co z polami kombi, polami wyboru i przyciskami radiowymi? Czy nie ma dobrej wtyczki, która się tym zajmuje? – bart

+0

Zastanawiam się, co to jest bart. –

7

Co jest nie tak z tym?

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

Nie zachowuje się dobrze w przypadku pól wyboru i przycisków radiowych –

0

zauważyłem, że identyfikatory elementów są takie same jak pól w JSON, jak o:

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

Jeżeli wyniki wygląda następująco:

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

Następnie kod świadczone przez Firma Seb i Chetan działa pod numerem:

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

Jeżeli wyniki wygląda następująco:

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

Następnie użyj tego kodu

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

Zbyt dobry do odpowiedzi na bezpośrednich polach –

Powiązane problemy