2010-06-09 34 views
6

Về cơ bản, tôi đang cố thu thập các ID của mọi phần tử với một lớp cụ thể và đặt các ID đó vào một mảng. Tôi đang sử dụng jQuery 1.4.1 và đã thử sử dụng .each(), nhưng không thực sự hiểu nó hoặc làm thế nào để vượt qua mảng ra khỏi chức năng.jQuery .each() với Array

$('a#submitarray').click(function(){ 

    var datearray = new Array(); 

    $('.selected').each(function(){ 
     datearray.push($(this).attr('id')); 
    }); 

    // AJAX code to send datearray to process.php file 

}); 

Tôi chắc chắn tôi sẽ tham gia chương trình này, vì vậy mọi lời khuyên đều hữu ích. Cảm ơn!

+0

Nếu cuộc gọi AJAX là * bên trong * trình xử lý, điều này sẽ chính xác. Nếu bạn đang gọi một hàm khác, bạn cần chuyển biểu dữ liệu làm đối số hoặc chỉ cần tạo biến bên ngoài trình xử lý. Xem câu trả lời của tôi dưới đây. – user113716

Trả lời

0

Tất cả mọi thứ đều tốt với tôi, mảng sẽ được điền và sẵn có khi bạn đã đặt nhận xét. Co niêm tin vao bản thân.

12

Bạn có thể sử dụng map() quá:

$('a#submitarray').click(function(){ 

    var datearray = $('selected').map(function(_, elem) { 
    return elem.id; 
    }).get(); // edited to add ".get()" at the end; thanks @patrick 
    // ajax 

}); 

Phương pháp map() qua mỗi chỉ số (mà ví dụ của tôi không sử dụng) và yếu tố thành chức năng nhất định, và xây dựng một mảng cho bạn từ các giá trị trở lại.

+2

@Pointy - Tôi loooove 'map()'! Chỉ cần đừng quên chuỗi '.get()' ở cuối, nếu không 'datearray' sẽ chứa một đối tượng jQuery thay vì chỉ là mảng. – user113716

+0

Ồ đúng; cảm ơn @patrick! Bạn không muốn jQuery có một "giảm" trong lõi quá? – Pointy

+0

@Pointy - Bạn biết đấy, lần duy nhất tôi gặp (hoặc suy nghĩ) giảm là khi tôi đang làm việc với CouchDB một chút. Đó là một chút chức năng thú vị. – user113716

4

Hãy thử với map chức năng jquery của:

datearray = $('.selected').map(function(){ 
    return $(this).attr('id'); 
}).get(); 

// use ajax to send datearray 
+0

Mã '= new Array()' trong dòng đầu tiên là không cần thiết. Câu lệnh thứ hai thay thế mảng. – Greg

+0

Cùng một bình luận tôi đã cho Pointy. Nếu bạn không chuỗi '.get()' ở cuối '.map()', 'datearray' sẽ chứa một đối tượng jQuery thay vì chỉ mảng của nó. – user113716

+0

@Greg, @patrick: Những người tốt. Cảm ơn – Sarfraz

1

Bạn không cần phải vượt qua trên các mảng đến chức năng ẩn danh vì nó sống trong phạm vi tương tự.

+0

Điều này đúng. Bất kỳ hàm nào được tạo trong một hàm khác đều có phạm vi cho các biến hàm chứa. Như vậy sau mỗi lần chạy bạn sẽ có dữ liệu của bạn trong datearray và bạn chỉ có thể vượt qua datearray vào chức năng ajax của bạn. –

0

Mảng phải được tải; bạn có thể gửi nó đến máy chủ sử dụng jQuery.post ...

$.post("process.php", datearray, function(dat) { 
    alert('Response: ' + dat); 
}); 
1

xây dựng trên câu trả lời khác, đây là một phiên bản đơn giản:

var datearray = $('selected').map(function() { 
    return this.id; 
}).get(); 

Chức năng map được id từ mỗi phần tử, và Hàm get trả về một mảng. Trong hàm ẩn danh được chuyển đến map, this đề cập đến từng phần tử được chọn lần lượt.

Các vấn đề liên quan