2010-04-13 14 views
58

Kullanıcıların jQuery ile giriş alanları ekleyebileceği bir form var.jQuery ile aynı diziye sahip birden çok <input> ile bir Array elde etme

<input type="text" id="task" name="task[]" /> 

Formu gönderdikten sonra PHP'de bir dizi alıyorum.

Bunu, $.ajax() ile işlemek istiyorum, ancak <input> s anahtarımın jQuery'deki bir diziye nasıl dönüştürüleceğini bilmiyorum.

Şimdiden teşekkürler.

cevap

109

map kullanma:

<input type="text" class="task" name="task[]" /> 

Şimdi böyle kullananlara jquery şey elde edebilirsiniz:

var values = $("input[id='task']") 
       .map(function(){return $(this).val();}).get(); 

değiştirmek veya (benzersiz olmalıdır) id kaldırırsanız, Seçici'nin $("input[name='task\\[\\]']")

Çalışma örneği kullanabilir: Öncelikle http://jsbin.com/ixeze3

+0

Bu 1,2,3 ile iyi çalışıyor, bu yüzden onu – x4tje

+1

@ x4tje - problemsize yardımcı olmak için php patlatması fonksiyonu ile kullanacağım. Patlatmak zorunda değilsiniz - 'değerler'in bir dizi değil, bir dizidir. AJAX çağrınızı veya kursunuzu nasıl yaptığınıza bağlıdır. – Kobi

+0

Neden ".get()' ye ihtiyacımız var? – imdhmd

6

Bir belgede birden çok öğe için aynı kimliği kullanamazsınız. Kimlikler farklı tutun ve öğeler için aynı adı. Birden çok öğe için

<input type="text" id="task1" name="task" /> 
<input type="text" id="task2" name="task" /> 
<input type="text" id="task3" name="task" /> 
<input type="text" id="task4" name="task" /> 
<input type="text" id="task5" name="task" /> 

var newArray = new Array(); 

$("input:text[name=task]").each(function(){ 
    newArray.push($(this)); 
}); 
+2

@rahul: o birden fazla metin kutuları değil tek uğraşıyor çünkü yapmayacağım söyledi. Eğer PHP'yi biliyorsanız, bir metin kutusunun olması gerektiği anlamına gelen 'task []' metin kutusunun adını not edin. – Sarfraz

+2

@rahul: güncellemeniz, php dizisi oluşturma konusunda hala yardımcı olmayacaktır, eğer alanın ismine [['] eklendiyse yapılabilir. – Sarfraz

31

, yerine id ör daha it a sınıfı vermelidir:

$('.task').each(function(){ 
    alert($(this).val()); 
}); 
+0

+1 sayacına .. – Anurag

+0

@Anurag: Teşekkürler :) – Sarfraz

+0

+1 Bu daha @Kobi'den daha kolay buluyorum, ancak her ikisi de iyi çalışıyor. –

13

, bir sayfada aynı kimliğe sahip birden çok öğe olmamalıdır - ID benzersiz olmalı. i kullanmak,

<input type='text' name='task'> 

ve

var taskArray = new Array(); 
$("input[name=task]").each(function() { 
    taskArray.push($(this).val()); 
}); 
9

isimler dizisini yakalamak için do görevin değer dizisi almak için:

sadece kimlik özniteliği kaldırmak ve ve o değiştir o:

$("input[name*='task']") 
+1

Yığına Hoş Geldiniz Taşma .. Lütfen cevaplamadan önce Faq okuyunuz .. – coder

+0

Bu aslında burada en iyi cevaptır. – timothymarois

0

Eğer seçici aynı kimliği almak istiyorsanız, kullanım:

$("[id=task]:eq(0)").val(); 
$("[id=task]:eq(1)").val(); 
etc... 
1

HTML:

<input type="text" name="task[]" class="form-control" id="task"> 

JS:

var tasks= new Array(); 
$('input[name^="task"]').each(function() 
{ 
tasks.push($(this).val()); 
}); 
İlgili konular