2016-03-21 22 views
1

Buna benzer bir HTML yapısına sahibim, ancak bir kullanıcı gereksinim duyduğunda dinamik olarak bir çift alan (& soyadı) ekliyorum. İlk 2 birleştirme alanlarını ve örneğin ikinci alan değerinden sonra bir sınırlayıcı ile katılmak isteyen AncakAlan değerleri gruplar halinde nasıl birleştirilir?

<div class="wrapper"> 
    <input id="firstname" type="text" value="firstname"> 
    <input id="surname" type="text" value="surname"> 
    <input id="firstname2" type="text" value="firstname"> 
    <input id="surname2" type="text" value="surname"> 
    </div> 

I

var vals = $('input').map(function() 
{ 
    return this.value; 
}).get().join(','); 

ayrılmış 1 uzun dize ve virgül içine tüm değerler elde edebilirsiniz firstname surname, firstname2 surname2 ve POST'ta hangi alanların oluşturulduğunu bilmediğim için, bunları seçicimde belirtemem, bu yüzden hepsini sarıcıdan almam gerek. ,

+0

dikkate almak (bir css sınıfı gibi!) ilk sırada. Eğer veri AJAX ile gönderilecekse, belki $ (formSelector) .serialize() 'yi kullanmak istersiniz? – PHPglue

+0

@PHPglue - bir çekirdekli CMS için ön uç geçici çözümü, çekirdeğe dokunamayacağınız veya zaten yükseltme yapamayacağınız: /. – Jared

cevap

2

Böyle bir şey yapabilirsiniz: Yalnızca geçen alanın değeri satır sınırlayıcı ile eklenecektir,

var vals = $('input').map(function() 
{ 
    return this.id.substring(0,6) == 'surname'?this.value+'~':this.value; 
}).get().join(','); 

.

Not: Ben kimlik özelliği kapalı mantığını esas aldık, ancak kullanımı için uygun olan hiç özniteliği kullanmak isteyebilirsiniz Bunu neden

Sen isteyebilirsiniz
+0

sarıcısındaki divları ayıklayabiliyorsunuz. Yine de 'ad, soyad, firstname2, soyad2' oluyor mu? – Jared

+0

Bunu yapmak var gibi çalışıyor var var vals = $ ('giriş') map (işlev { this.className.substring döndürün (0,7) == 'soyadı'? This.value + ',': this .value; }) get(). join (''); ' – Jared

1

Bu

<div class="wrapper"> 
<input class="firstclass" id="firstname" type="text" value="firstname"> 
<input class="firstclass" id="surname" type="text" value="surname"> 
<input class="secondclass" id="firstname2" type="text" value="firstname"> 
<input class="secondclass" id="surname2" type="text" value="surname"> 
</div> 

gibi bir sınıf birleştirilmiş gerektiğini alanını atamak mümkün olmalıdır ve artık yerine eleman türü input sınıf adını kullanarak birleştirmek için alanları seçmek gerekir her bir çift böyle, bu kendi div böylece bu

var vals = $('.firstclass').map(function() 
{ 
    return this.value; 
}).get().join(','); 

Alternatif gibi, html yeniden;

<div class="wrapper"> 
    <div class="inputs"> 
     <input class="firstclass" id="firstname" type="text" value="firstname"> 
     <input class="firstclass" id="surname" type="text" value="surname"> 
    </div> 
    <div class="inputs"> 
     <input class="firstclass" id="firstname" type="text" value="firstname"> 
     <input class="firstclass" id="surname" type="text" value="surname"> 
    </div> 
</div> 

ve daha sonra, ilk olarak bu gibi bir dizi olarak inputs seçmek; ve döngüleri girişler üzerinde ve ilk örnekte yaptığınız gibi alanları birleştirin.

for (var i in inputs) { 
    var vals = $(i).find('input').map(function() 
    { 
     return this.value; 
    }).get().join(','); 
    ... do something with vals... 
} 
+0

Maalesef her iki tarafa bir sınıf eklediğimde, seçicim bu seçiciyi hangi çiftlerin kullanabileceğini hâlâ biliyor mu? ancak kullanıcı birden fazla alan çifti ekleyebildiğinden, bunları seçmek için hangi seçicilere ihtiyaç duyduğumu bilmiyorum ... eğer bu mantıklıysa? – Jared

+0

Eklediğiniz çiftleri takip etmeniz gerekecek. – Soren

+1

Alternatif olarak (ve daha iyisi), html'inizi yeniden yapılandıracaksınız, böylece çiftler div'larda gruplandırıldı, ve sadece – Soren

İlgili konular