2010-09-02 13 views
6

Ajax kullanarak dinamik olarak oluşturulmuş bir formum var (form öğelerinin verileri bir veri tabanından gelmesi gerektiği gibi) ve form öğelerini serileştirmek istiyorum. ajax. Şu anda sadece jQuery web sitesinden kodunu kullanarak teorimi test ediyorum sadece ben form öğeleri pick up olmadığını görmek ve problem burada yatıyor için:jQuery serializeArray dinamik olarak oluşturulmuş form öğeleri almıyor

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

    }); 
}); 

Ben verilere bazı değişiklikler yapmanız gerekir önce Göndermek için ve bu kod henüz yazılmadı, ancak bulduğum şey, sayfa yükleme sırasında var olan sayfadaki herhangi bir girdi öğesinin doğru olarak seçilmesidir, Javascript kullanılarak doldurulan tüm öğeler doğru şekilde alınır, ancak ajax kullanılarak oluşturulan yok sayılır.

Bunun normalde "canlı" kullanılarak çözüldüğünü biliyorum, ancak bunun serializeArray() ile nasıl çözüleceği açık değil. Ajax ek form öğelerini kullanarak #customSearchTable eklenir ve bunlar alınamayanlardır.

Herhangi bir yardım büyük beğeni topladı.

Teşekkür

bir "sorun" olarak bu bulur herkesten için
+1

Bu yöntem, öğeler eklendiğinde önemli değil, form öğeleri olarak doğru şekilde eklenmedikleri görünüyor, bu kodu gönderebilir misiniz? Örneğin, üzerinde bir 'isim 'özelliği var mı? –

+0

Nick, çok teşekkürler, haklısın, dinamik olarak oluşturulmuş form öğeleri isim niteliğini kaçırıyordu ... DOH !!! Çok teşekkürler!! – Cydaps

cevap

7

ben biraz daha burada açıklama üzerine açıklayacağız:

bunu döngü oluyor .serializeArray() diyoruz sadece <form> gönderme gibi olur ya elemanlar sunulacak almak, zaten mümkün olduğu kadar yakın. anahtar bölümü is here:

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

Sadece <form> olarak olanlar dışında bu öğeleri filtreler this.name kullanılarak .filter() çağrı Serileştirilecek, bir name attribute olmadan öğeleri içermemelidir de gönderebilirsiniz.

+0

Teşekkürler Nick, aynı sorunu yaşayan herkes için bunu açıklığa kavuşturmayı umuyorum. – Cydaps

+0

, '