Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] Wysylanie formularza z checkboxem
Forum PHP.pl > Forum > XML, AJAX > AJAX
icepopo
Czesc!
Chce stworzyc taki skrypt w jquery ktory po kliknięciu na checkbox(ich liczba jest zmienna), wyśle jego zawartość(checked, not-checked) do skryptu php. Na podstawie jakiegos tutoriala skleciłem taki kod:
Kod
$(document).ready(function(){
$("form#form").serialize(function() {
  var achieved = $('input:checkbox');
  var id = $('input[id]');

  var data = 'achieved=' + achieved.val() + '&;id=' + id.val();

  $.ajax({
   type: "POST",
   url: "change_achievement.php",
   data: data,
   success: function(){
    $('div.changed').fadeIn(400);
    setTimeout(function(){ $("div.changed").fadeOut(400) }, 4000);
   }
  
  });
  return false;
});
});

a tak wygladają checkboxy
  1. <form method="post" id="form">
  2. <input type="checkbox" id="1" name="tick">
  3. <input type="checkbox" id="2" name="tick">
  4. <input type="checkbox" id="3" name="tick">
  5. <input type="checkbox" id="4" name="tick">
  6. <input type="checkbox" id="5" name="tick">
  7. <input type="checkbox" id="6" name="tick">
  8. </form>
i jak można się domyślić, moja aplikacja nie działa. Co zrobiłem źle?
erix
Sprawdź poprawność swojego kodu HTML, gdyż się na pewno nie waliduje.
icepopo
Cytat(erix @ 6.06.2011, 14:48:00 ) *
Sprawdź poprawność swojego kodu HTML, gdyż się na pewno nie waliduje.

po poprawieniu jakis drobnych bledow(brak kodowania strony, brak tekstu alternatywnego w linkach)walidator nie pokazuje błędów, a skrypt nadal nie dziala
markonix
Jaki tu jest zastosowany event? Kiedy on ma wysyłać te info o zaznaczeniu? Dlaczego dajesz id, id, id zamiast value?
icepopo
Cytat(markonix @ 6.06.2011, 15:57:47 ) *
Jaki tu jest zastosowany event? Kiedy on ma wysyłać te info o zaznaczeniu? Dlaczego dajesz id, id, id zamiast value?

Ma wysyłać po kliknięciu w checkboxa. Z przyzwyczajenia uzywam id, powinienem zmienic na value?
mortus
Cytat(icepopo @ 6.06.2011, 16:24:29 ) *
Ma wysyłać po kliknięciu w checkboxa. Z przyzwyczajenia uzywam id, powinienem zmienic na value?

Zdecydowanie powinieneś używać value zamiast id, tym bardziej, że specyfikacja (X)HTML wyraźnie mówi, że wartość atrybutu id może rozpoczynać się od dużej lub małej litery (nie cyfry). Masz złe przyzwyczajenia.
Poza tym nie wiem, co Ty chcesz osiągnąć, ale wydaje mi się, że AJAX jest tu zbędny, w każdym bądź razie nie wykorzystujesz żadnych danych, które serwer miałby zwrócić. Chyba musisz bardziej szczegółowo opisać problem.
icepopo
Cytat(mortus @ 6.06.2011, 16:53:42 ) *
Zdecydowanie powinieneś używać value zamiast id, tym bardziej, że specyfikacja (X)HTML wyraźnie mówi, że wartość atrybutu id może rozpoczynać się od dużej lub małej litery (nie cyfry). Masz złe przyzwyczajenia.
Poza tym nie wiem, co Ty chcesz osiągnąć, ale wydaje mi się, że AJAX jest tu zbędny, w każdym bądź razie nie wykorzystujesz żadnych danych, które serwer miałby zwrócić. Chyba musisz bardziej szczegółowo opisać problem.

Jestem zielony w JS i pochodnych, więc całkiem możliwe, że AJAX jest zbędny. Zależy mi na braku przeładowania strony, i pierwszy lepszy przykład który znalazłem był z jquery i ajaxem. To co chce osiągnąć przedstawia się następująco: mam liste checkboxów generowana na podstawie danych z bazy danych, po kliknięciu w dany checkbox chce jego wartość(kliknięty, nie-klikniety) zapisać w bazie danych.
erix
No właśnie, a chodziło mi o identyfikator, który nie może zaczynać się od cyfry, o czym ~mortus już wspomniał.

Puść gdzieś ten kod na żywo, będzie łatwiej debugować.
icepopo
Cytat(erix @ 6.06.2011, 21:16:20 ) *
No właśnie, a chodziło mi o identyfikator, który nie może zaczynać się od cyfry, o czym ~mortus już wspomniał.

Puść gdzieś ten kod na żywo, będzie łatwiej debugować.

http://icepopo.pl/checkbox/ticking.php
nospor
Chcesz wysyłać checkbox, gdy ktoś na niego kliknie. Ok. Tylko powiedz mi co Twoim zdaniem ma robić ten kod:
$("form#form").serialize(function() {
?
Przeczytałeś w ogóle co robi serialize? Przeczytałeś w ogóle jak to wywoływać?
http://api.jquery.com/serialize/
Przecież to co ty napisałeś nie ma żadnego sensu.

Skoro chcesz coś robić na kliknięcie checkbox to podepnij pod checkboxy zdarzenie click() i wtedy wysyłaj ajax.
Rozumiem, że z js możesz być słaby i początkujący ale nie strzelaj w ciemno tylko najpierw przeczytaj w dokumentacji jak używać to, co akurat wykorzystujesz.
icepopo
udało mi się napisać kod który działa, ale po kliknięciu checkbox jest nie-klikniety.postanowiłem zaznaczyć go jquery, lecz to nie działa. próbowałem różnego umiejscowienia w kodzie(przed wysłaniem danych, po, jako success po wysłaniu), ale zadnego efektu nie wywołałem. co zrobiłem źle?

Kod
  $(".checkinput").click(function() {
  
  var id = $(this).attr('id')
  var data = "id=" + id;
  $.ajax({
   type: "POST",
   url: "change_achievement.php",
   data: data,
   success: function(){
    $(this).attr('checked', true);
   }
  });
  return false;
});
erix
[JAVASCRIPT] pobierz, plaintext
  1. success: function(){
  2. $(this).attr('checked', true);
  3. }
[JAVASCRIPT] pobierz, plaintext


Jest tak, gdyż funkcja opisana jako success jest wywoływana bezkontekstowo, tj. this już nie oznacza konkretnego checkboksa. Musisz zapisać uchwyt do jakiejś pomocniczej zmiennej dostępnej dla obu funkcji i na tym uchwycie operować.
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.