2016-04-01 30 views
0

Kullanıcı girişine dayalı olarak giriş alanlarını gruplara ekleyen dinamik bir form üzerinde çalışıyorum. Bu öğelerin bazılarına eklenecek bazı ek işlevler nedeniyle, bunları JSON nesneleri olarak oluşturmam gerekiyor. Bu yöntemi sadece bir giriş elemanı ile test ettiğimde, eleman sayfaya eklenir, sorun olmaz. Ancak, sürece ikinci bir eleman eklemeyi denediğimde, yerine [object Object] [object Object] eklenir. İşte JavaScript - dönen [object Object]

//THIS IS THE PROBLEM FUNCTION, WHICH IS TRIGGERED BY THE CHANGE FUNCTION BELOW 
function generateInput(siteNumber, x){ 

    select = $("<select/>", { 
       id: 'select'+siteNumber+''+x+'', 
       name: 'select'+siteNumber+'['+x+']' 
       }).append(list); 

    notes = $("<input/>", { 
       type: 'text', 
       id: 'notes'+siteNumber+''+x+'', 
       name: 'notes'+siteNumber+'['+x+']' 
       }); 


    //IF I RETURN ONE OR THE OTHER, NO PROBLEM 
    return select + notes; 
}; 

$(document).on("change", ".number_select", function(){ 
    siteNumber = $(this).parent().attr('data-site_number'); 
    numberFound = $(this).val(); 

    for(x = 1; x <= numberFound; x++){ 
     this['inputArray' + siteNumber].push(generateInput(siteNumber, x)); 
    }; 

    $(this).parent().append(this['inputArray' + siteNumber]); 
}); 

Sorunun ben generateInput sonunda elemanlarını dönüyorum yolu ile olduğunu hayal ... özü, ama ilgilenmenin en uygun yolunun emin değilim bu. Temel olarak, benim elde etmeyi hedeflediğim şey, yanında duran metin elemanı ile seçen elemandır.

Çok teşekkürler!

+2

'notes' bir nesnedir. '+ notes' nesneyi dizgeyecektir böylece nesne [nesne]' – elclanrs

+3

JSON bir nesne değildir. JSON bir dizedir. JavaScript nesneleri JSON'u arama. –

+0

Ben onu spruced, bu yüzden aşağıdaki cevapları ile jives. – skwidbreth

cevap

3

+ işleci, bir dizgenin diğerlerinden biri olan terimlerden birinin toString() yöntemini çağırır.

return select.add(notes); 
1

Eğer:

İstediğin değil, bunun yerine neyi istiyorum jQuery haline gelebilir Böylece bir

return select + notes; 

içine nesneleri (see jquery doc for add) birleştirmek olduğunu iki nesne var ve bunları ekleyin, "[object Object]" dizesini döndüren .toString() yöntemini kullanarak dizeye dökülür. Bu, Object örneğinin bir nesnesi olduğu anlamına gelir. spread operator kullanarak .push() yöntemine sonucu geçebilir

Sonra
return [species, notes]; 

: Her iki nesneyi döndürmek için isterseniz, dizi olarak örneğin onları dönebilirsiniz

this['inputArray' + siteNumber].push(...generateInput(siteNumber, x)); 

Ancak .push() yöntemle beri birçok argümanı kabul eder, kodun bu kısmını değiştirmenize bile gerek yoktur.

+0

Diğer cevabı kabul ediyorum çünkü formda ortaya çıkan diğer bazı durumlarda daha iyi çalışıyor, ama bu iyi bir cevap. – skwidbreth

İlgili konular