2010-04-13 21 views
58

Tôi có một biểu mẫu nơi người dùng có thể thêm các trường nhập bằng jQuery.Cách lấy một mảng với jQuery, nhiều <input> có cùng tên

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

Sau khi gửi biểu mẫu, tôi nhận được một mảng bằng PHP.

Tôi muốn xử lý điều này với $.ajax() nhưng tôi không có ý tưởng làm thế nào để biến của tôi <input> s cho một mảng trong jQuery.

Xin cảm ơn trước.

Trả lời

109

Sử dụng map:

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

Nếu bạn thay đổi hoặc xóa id (mà phải là duy nhất), bạn cũng có thể sử dụng bộ chọn $("input[name='task\\[\\]']")

dụ làm việc: http://jsbin.com/ixeze3

+0

điều này đang làm việc tốt với 1,2,3 vì vậy tôi sẽ sử dụng điều này với chức năng phát nổ của php để làm cho nó được sắp xếp cảm ơn @all đã giúp – x4tje

+1

@ x4tje - không sao cả. Bạn không cần phải sử dụng phát nổ - lưu ý rằng 'giá trị' là một mảng, không phải là một chuỗi. Nó phụ thuộc vào cách bạn thực hiện cuộc gọi AJAX hoặc khóa học. – Kobi

+0

tại sao chúng ta cần '.get()' cho? – imdhmd

6

Bạn không thể sử dụng cùng một id cho nhiều phần tử trong tài liệu. Giữ các id khác nhau và đặt tên giống nhau cho các phần tử.

<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: rằng sẽ không làm vì anh là đối phó với nhiều hộp văn bản không phải là một. Nếu bạn biết PHP, hãy chú ý tên của hộp văn bản 'task []' có nghĩa là có nhiều hơn một hộp văn bản. – Sarfraz

+2

@rahul: bản cập nhật của bạn sẽ không giúp ích gì trong việc tạo ra mảng php có thể được thực hiện nếu '[]' được gắn với tên của trường. – Sarfraz

31

Đối với nhiều yếu tố, bạn nên cung cấp cho nó một lớp học chứ không phải là id ví dụ:

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

Bây giờ bạn có thể nhận được những người sử dụng jquery một cái gì đó như thế này:

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

+1 để truy cập .. – Anurag

+0

@Anurag: Cảm ơn :) – Sarfraz

+0

+1 Tôi thấy điều này đơn giản hơn @Kobi, nhưng cả hai đều hoạt động tốt. –

13

Thứ nhất, bạn không nên có nhiều yếu tố với cùng một ID trên một trang - ID phải là duy nhất.

Bạn chỉ có thể loại bỏ các thuộc tính id và và thay thế bằng:

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

và để có được một mảng của các giá trị của công việc làm

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

Để bắt mảng tên, tôi sử dụng rằng:

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

Chào mừng bạn đến Stack Overflow..Xin vui lòng đọc Faq trước khi trả lời .. – coder

+0

Đây thực sự là câu trả lời hay nhất ở đây. – timothymarois

0

nếu bạn muốn có cùng một id, sử dụng :

$("[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()); 
}); 
Các vấn đề liên quan