2010-06-09 19 views
6

Zasadniczo próbuję zebrać identyfikatory każdego elementu z określoną klasą i umieścić te identyfikatory w tablicy. Używam jQuery 1.4.1 i próbowałem używać .each(), ale tak naprawdę nie rozumiem tego ani jak przekazać tablicę poza tę funkcję.jQuery .each() z tablicą

$('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 

}); 

Jestem pewien, że jestem daleko, ponieważ jestem całkiem nowy w tym, więc każda pomoc rada byłaby niesamowita. Dzięki!

+0

Jeśli wywołanie AJAX jest * wewnątrz * programu obsługi, powinno to być poprawne. Jeśli wywołujesz inną funkcję, musisz przekazać datearray jako argument lub po prostu utworzyć zmienną poza obsługą. Zobacz moją odpowiedź poniżej. – user113716

Odpowiedz

0

Wszystko mi dobrze wygląda, tablica zostanie wypełniona i będzie dostępna tam, gdzie umieściłeś komentarz. Miej wiarę w siebie.

12

Można użyć map() też:

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

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

}); 

Sposób map() przechodzi każdy indeks (które mój przykład nie używać) i element do danej funkcji, i buduje tablicę dla was od wartości zwracanych.

+2

@Pointy - I loooove 'map()'! Po prostu nie zapomnij połączyć '.get()' na końcu, w przeciwnym razie 'datearray' będzie zawierał obiekt jQuery zamiast samej tablicy. – user113716

+0

O rację; dzięki @patrick! Czy nie życzysz sobie, aby jQuery miał także "redukcję" w jądrze? – Pointy

+0

@Pointy - Wiesz, jedyny moment, w którym natknąłem się (lub myślę) na zmniejszenie, to było, gdy trochę majstrowałem przy CouchDB. To interesujący kawałek funkcjonalności. – user113716

4

Spróbuj z map funkcji jQuery za:

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

// use ajax to send datearray 
+0

Kod '= new Array()' w pierwszym wierszu jest niepotrzebny. Druga instrukcja zastępuje tablicę. – Greg

+0

Ten sam komentarz podałem Pointy. Jeśli nie podłączysz '.get()' na końcu '.map()', 'datearray' będzie zawierał obiekt jQuery zamiast samej tablicy. – user113716

+0

@Greg, @patrick: Dobre punkty chłopaki. Dzięki – Sarfraz

1

Nie trzeba przechodzić na tablicy do funkcji anonimowej, ponieważ mieszka w tym samym zakresie.

+0

To prawda. Każda funkcja utworzona w innym ma zakres do zmiennych funkcji zawierających. Jako takie po każdym uruchomieniu będziesz mieć dane w datearray i można po prostu przekazać datearray do funkcji ajax. –

0

Tablica powinna zostać załadowana; możesz wysłać je do serwera przy użyciu jQuery.post ...

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

Opierając się na innych odpowiedzi, o to uproszczona wersja:

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

Funkcja map dostaje identyfikator z każdego elementu, a Funkcja get zwraca tablicę. W ramach funkcji anonimowej przekazanej do map, this odnosi się do każdego wybranego elementu po kolei.