2009-03-11 25 views
6

Tôi biết có một cách thanh lịch/hiệu quả hơn để làm điều này (trong php tôi sẽ sử dụng foreach) nhưng với jQuery làm cách nào tôi có thể đi các cặp var/val của một phản hồi JSON và điền các trường biểu mẫu có cùng id như tên trường trong phản hồi JSON?"Đi bộ" phản hồi JSON và điền vào các trường biểu mẫu - cách tiếp cận hiệu quả hơn?

Đây là phản ứng JSON của tôi:

[{"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"}] 

Đây là mã jQuery của tôi cho Populating dạng:

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

Đó là tất cả hoạt động tốt và tốt, nhưng tôi thực sự muốn tránh tất cả các nếu/các câu lệnh khác và chỉ sử dụng dữ liệu quay lại từ phương thức getJSON để xác định các trường nào được điền với các giá trị nào. Một cách tiếp cận sạch hơn/hiệu quả hơn cho điều này là gì?

- Nicholas

Trả lời

21

Bạn có thể thoát khỏi tất cả "nếu" phát biểu bằng cách thay thế $ .each của bạn với điều này:

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

phản ứng tuyệt vời. Hoạt động hoàn hảo và chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn. –

+8

Điều này làm việc tốt miễn là tất cả các lĩnh vực là các lĩnh vực đầu vào. Nhưng còn về hộp tổ hợp, hộp kiểm và nút radio? Không phải là có một plugin tốt mà chăm sóc này? – bart

+0

Tôi tự hỏi điều tương tự như bart. –

7

Điều gì là sai với điều này?

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

Không hoạt động tốt cho các hộp kiểm và nút radio –

0

tôi nhận thấy rằng ID yếu tố cũng giống như trường trong JSON của bạn, làm thế nào về:

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

Nếu kết quả của bạn trông như thế này:

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

Sau đó mã được cung cấp bởi Seb và Chetan hoạt động

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

Nếu kết quả của bạn trông như thế này:

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

Sau đó sử dụng mã này

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

Quá tốt cho câu trả lời trên các trường trực tiếp –

Các vấn đề liên quan