witam,
Chciałem zrobić prosty formularz bez przeładowania strony za pomoc± serialize i wszystko działa OK, ale po wywołaniu skryptu nie przekazuje zmiennej Submit POST -> $_POST['unpublished'] i $_POST['published']
Jeżeli formularz ładuję bezpo¶rednio z products_success.php te zmienne istniej± i warunki mog± być spełnione.
Problem mam taki jak zrobić żeby te zmienne POST po wywołaniu serialize też istniały?
<http://december.com/html/4/element/script.html> $(document).ready(function(){ $("#form_add_products").on("submit", function(event){ event.preventDefault(); $.post("products_success.php", $(this).serialize(), function(data){ }); }); }); </http://december.com/html/4/element/script.html> <http://december.com/html/4/element/form.html id="form_add_products" method="post" enctype="multipart/form-data"> .... <http://december.com/html/4/element/input.html type="submit" name="published" value="Opublikuj" class="dropdown-item"> <http://december.com/html/4/element/input.html type="submit" name="unpublished" value="Wycofaj" class="dropdown-item"> </http://december.com/html/4/element/form.html>
http://www.php.net/echo = $_POST['published']; http://www.php.net/echo = $_POST['unpublished']; if (http://www.php.net/isset($_POST['published'])) { http://www.php.net/echo 'publikuje'; } if (http://www.php.net/isset($_POST['unpublished'])) { http://www.php.net/echo 'wylaczony'; }
serialize omija buttony.Musisz niestety sam recznie dodac ten button, ktory byl kliniety
A "wycofaj" powoduje zapis danych?
dzięki za informację. Mogę prosić o jakis przykład jak dodac samemu button ?
To po co analizować, który przycisk został naci¶nięty w PHP.
Przycisk powinien być albo <input type="reset"> albo buttonem z przekierowaniem do innej strony/przeładowaniem (JS).
<http://december.com/html/4/element/script.html> $(document).ready(function(){ $("#form_add_products").on("submit", function(event){ event.preventDefault(); var formData = $(this).serialize(); formData.push({name:"published", value:"Opublikuj"}); $.post("products_success.php", formData, function(data){ }); }); }); </http://december.com/html/4/element/script.html>
I czym sie objawia "nie dzialanie" ?
products.php?pageno=1:424 Uncaught TypeError: formData.push is not a function at HTMLFormElement.<anonymous> (products.php?pageno=1:424:15) at HTMLFormElement.dispatch (jquery-3.5.1.min.js:2:43090) at v.handle (jquery-3.5.1.min.js:2:41074)
no to pisz od razu a "nei nie dziala"
co zwraca
console.log(formData);
?
sorki, w moim przykladzie powinno byc
serializeArray()
$(document).ready(function(){ $("#form_add_products").on("submit", function(event){ event.preventDefault(); var formData = $(this).serializeArray(); formData.push({name:"published", value:"Opublikuj"}); formData.push({name:"unpublished", value:"Wycofaj"}); $.post("products_success.php", formData, function(data){ }); }); });
No submit masz dodawac ten ktory sie kliknal a nie na chama pchasz dwa.
Jaki zostal klikniety submit to chyba masz w event a konkretnie w event.target. Sprawdz
console.log(event.target);
co ci zwraca?
hm, to chyba w przypadku ajax musisz podpiac zdarzenia click pod te buttony, zamiast zdarzenie pod wyslanie forma.
Wtedy bedziesz wiedzial jednoznacznie ktory submit kliknieto i tylko jego dodasz
No zamiast
$("#form_add_products").on("submit"
masz zrobic
$("TWOJ INPUT").on("click"
A zmieniles o to
$(this).serializeArray();
by zmiast $(this) bylo wskazanie na formularz?
$(document).ready(function(){ $("#published").on("click", function(event){ event.preventDefault(); var formData = $('#form_add_products').serializeArray(); formData.push({name:"published", value:"Opublikuj"}); $.post("products_success.php", formData, function(data){ }); }); $("#unpublished").on("click", function(event){ event.preventDefault(); var formData = $('#form_add_products').serializeArray(); formData.push({name:"unpublished", value:"Wycofaj"}); $.post("products_success.php", formData, function(data){ }); }); });
Bardziej mi chodzilo byc to zrobil jeden ON na oba submity
Dodajesz klase dla submit ktore chcesz lapac
<input type="submit" name="published" value="Opublikuj" class="dropdown-item lap-submit">
<input type="submit" name="unpublished" value="Wycofaj" class="dropdown-item lap-submit">
a potem lecisz po tej klasie
$(" lap-submit").on("click", function(event){
event.preventDefault();
var formData = $('#form_add_products').serializeArray();
formData.push({name:event.target.name, value:event.target.value});
$.post("products_success.php",
formData,
function(data){
});
});
i event.target bodajze zawiera klikniety submit wiec
formData.push({name:event.target.name, value:event.target.value});
I juz, ale to pisane z palca, sprawdz ten event.target
https://jsfiddle.net/7emn9y14/
Dziękuję wszystkim za pomoc już działa idealnie.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)