2010-09-02 33 views
6

Tôi có biểu mẫu được tạo động bằng cách sử dụng ajax (vì dữ liệu cho các phần tử biểu mẫu phải đến từ cơ sở dữ liệu) và tôi muốn tuần tự hóa các phần tử của biểu mẫu để gửi ajax. Tôi hiện chỉ là thử nghiệm lý thuyết của tôi sử dụng mã từ trang web của jQuery chỉ để xem nếu tôi có thể nhận các yếu tố hình thức và đây là nơi mà vấn đề nằm:jQuery serializeArray không chọn các thành phần tạo mẫu động

$(document).ready(function() { 
    $('#btnCustomSearch').live('click', function() { 
      $('#results').html(''); 
      alert($('#customSearchTable :input').serializeArray()); 
      // get all the inputs into an array. 
      var fields = $('#customSearchTable :input').serializeArray(); 
      jQuery.each(fields, function(i, field) { 
       $("#results").append(field.name + " = " + field.value + ", "); 
      }); 

      // now we'll reformat the data as we need 

      // here we'll send the data via ajax 

    }); 
}); 

tôi cần phải thực hiện một số thay đổi đối với dữ liệu trước để gửi và mã này chưa được viết, nhưng những gì tôi tìm thấy là bất kỳ yếu tố đầu vào nào trên trang đã tải vào thời điểm tải trang được chọn chính xác, mọi phần tử được điền bằng Javascript đều được chọn chính xác, nhưng bất kỳ được tạo bằng ajax được bỏ qua.

Tôi biết điều này thường được giải quyết bằng cách sử dụng "trực tiếp", nhưng tôi không rõ cách giải quyết vấn đề này với serializeArray(). Việc sử dụng các phần tử biểu mẫu bổ sung Ajax được thêm vào #customSearchTable và đây là những phần tử không được chọn.

Bất kỳ trợ giúp nào được đánh giá cao.

Cảm ơn

+1

Phương pháp này không quan tâm khi các yếu tố được thêm vào, có vẻ như chúng không được thêm chính xác làm phần tử biểu mẫu, bạn có thể đăng mã đó không? Ví dụ, chúng có thuộc tính 'name' trên chúng không? –

+0

Nick, cảm ơn rất nhiều, bạn nói đúng, các yếu tố hình thức được tạo động đã bị thiếu thuộc tính tên .... DOH !!! Cám ơn rất nhiều!! – Cydaps

Trả lời

7

tôi sẽ trình bày chi tiết trên các bình luận ở đây hơn một chút:

Khi bạn gọi .serializeArray() nó Looping qua cũng giống như một trình <form> sẽ hoặc càng gần càng tốt dù sao, để có được những yếu tố để được gửi. Các phần quan trọng is here:

.filter(function() { 
    return this.name && !this.disabled && 
     (this.checked || rselectTextarea.test(this.nodeName) || 
     rinput.test(this.type)); 
}) 

Cũng giống như một <form> nộp sẽ không bao gồm các yếu tố mà không có một name attribute, các .filter() gọi điện bằng this.name sẽ lọc những yếu tố ra khỏi những người thân để được đăng.

+0

Cảm ơn Nick, hy vọng rằng làm rõ nó cho bất cứ ai khác có cùng một vấn đề. – Cydaps

+0

được sửa chữa cho các phần tử '