Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery]Przesłanie wartości zaznaczonych checkboxów.
Forum PHP.pl > Forum > XML, AJAX
gcdreak
Witam!
Chcę za pomocą funkcji $.ajax przesłąć wartość (value) zaznaczonych pól checkbox.
Wartość jednego pola pobieram:
Kod
var jedna = $('input.check:checked').val();

a liczbę zaznaczonych checkboxow tak:
Kod
var ile = $('input.check:checked').length;


Wartości są pojedyńczymi liczbami. Jak zrobić, aby te wartości zaznaczonych checkboxów były przesyłane do skryptu PHP np: jako liczby oddzielone przecinkami?
Może jest jakiś prostszy sposób?

Jeżeli robię coś takiego:
Kod
for(i = 0; i < ile; i++){
            wszystkie[i] = jedna;
        }

To otrzymuje odpowiednią ilośc wartości, ale są to tylko wartości pierwszego wybranego checkboxa:/
sowiq
Sprawdź to:
Kod
var z_przecinkami;
$('input.check:checked').each( function(){
    z_przecinkami += $(this).val() + ', ';
});
alert(z_przecinkami);
gcdreak
Dzięki wielkie.
Pięknie działa.
A jak można by to jeszcze zrobić, aby dziłało także jeśli user ma wyłączony javascript?
sowiq
Cytat(gcdreak @ 14.06.2009, 21:59:50 ) *
A jak można by to jeszcze zrobić, aby dziłało także jeśli user ma wyłączony javascript?
Ajax to JavaScript. jQuery to JavaScript. Nie da się.
erix
Cytat
A jak można by to jeszcze zrobić, aby dziłało także jeśli user ma wyłączony javascript?

Nazwij checkboxy tymi samymi frazami "tablicując" (nazwa[]) i po submicie formularza używaj implode" title="Zobacz w manualu PHP" target="_manual.
gcdreak
Tak zrobiłem i pojawia się pewna niezgodność. Jeśli używam AJAXa w ten sposób:
Kod
$('input.check:checked').each( function(){
           wszystkie += $(this).val() + ', ';
        });

to do skryptu przesyłany jest string. Z drugiej strony jeśli wyłącze JS to skrypt otrzymuje tablicę.
Pojawia się więc niezgodność.
Jak to ujednolicić?
Myślę, że najlepiej było by ten skrypcik jQuery trochę zmienić, aby przesyłał tablicę.
Jak to zrobić?
sowiq
Mój poprzedni kod + 15 sek na Google:
Kod
$('input.check:checked').each( function(){
    // tu musisz sobie sam poradzić ruszając głową
    kolejny_element_tablicy = $(this).val();
});

// zapytanie ajax żywcem z http://docs.jquery.com/Ajax/jQuery.ajaxSetup#options
$.ajaxSetup({
  url: "./superadresik.php",
  global: false,
  type: "POST"
});
$.ajax({ moja_tablica: wygenerowana_wczesniej_tablica });
gcdreak
Jakbym wiedział co mam w pisać w miejscu w którym napisałeś żebym ruszył głową, to bym nie pisał poprzedniego posta;P

Urzywam czegoś takiego:
Kod
$('input[type=submit]').click(function(){
        
        var ile = $('input.check:checked').length;
        var wszystkie = new Array;        

            for (i = 0; i < ile; i++) {
                $('input.check:checked').each( function(){
                    wszystkie[i] = $(this).val();
                });
            }

        
        
        $.ajax({
            type: 'post',
            url: '../skrypt.php',
            data: 'wszystkie=' + wszystkie,
            
            success: function(odpowiedz){
                $('ul#odpowiedz').fadeIn(1000).html(odpowiedz);
              
            }
            
        });//end ajax

        return false;
    });

Niestety przesyłane są tylko wartości największe, lecz w odpowiedniej ilości...
erix
Cytat
Urzywam czegoś takiego:

Cytat
Niestety przesyłane są tylko wartości największe, lecz w odpowiedniej ilości...

Napisz najpierw po polsku oraz bez skrótów myślowych tak, aby każdy wiedział co masz na myśli...
sowiq
Cytat
Napisz najpierw po polsku
True.

Zamień:
Kod
for (i = 0; i < ile; i++) {
    $('input.check:checked').each( function(){
        wszystkie[i] = $(this).val();
    });
}


Na:
Kod
var i = 0;
$('input.check:checked').each( function(){
        wszystkie[i ++] = $(this).val();
});


each() to już pętla, więc for() nie jest potrzebny.
gcdreak
Niestety nie działa,
Skrypt PHP otrzymuje string.
erix
Kod
wszystkie[i ++]

Na pewno tu spacja potrzebna? tongue.gif
gcdreak
Nie powinno jej tam być.
My się zastanawiamy ale przecież to troche bez sensu jest myślenie i myślenie.
Wystarczy to w skrypcie:
Kod
if(is_array($wszystkie)){
         $wszystkie = strip_tags(trim(implode(',',$wszystkie)));
     }

i problemu nie ma;D
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.