Я использую $_SESSION
для динамического создания форм для своего интернет-магазина. Эти формы содержат пользовательскую информацию для продукта, который хочет клиент. Это макет:
Страница 1
Клиент заполняет форму, которая выглядит примерно так:
<form action="page2" method="post"> <input type="text" name="size"> <input type="text" name="color"> <input type="submit" name="submit" value="Review Order"> </form>
Страница 2
Клиент проверяет детали заказа и имеет возможность добавлять дополнительные продукты. Клиент возвращается на страницу1, чтобы заказать еще один. Все заказы клиента будут показаны на стр. 2 в соответствующей форме.
Выглядит так:
Size: 1 Color: blue Click Here To Checkout Size: 2 Color:green Click Here To Checkout Size:3 color:red Click Here To Checkout
Я хочу одну кнопку, которая добавит ВСЕ заказы в корзину PayPal. Конечно, они могут добавить каждый заказ индивидуально, нажав « Click Here To Checkout
, но затем им придется пройти через большой цикл, чтобы добавить несколько продуктов.
Я хочу, чтобы клиент мог добавить как можно больше продуктов, а затем нажать одну кнопку, которая добавит все заказы в корзину покупок.
Это то, что я пробовал, но это явно не сработало :
<script> $(document).ready(function(){ $('#clickAll').on('click', function() { $('input[type="submit"]').trigger('click'); }); }); </script> <form action="" method="post"> <input type="text" name="name"> <input type="submit" name="submit" value="submit"> </form> <form action="" method="post"> <input type="text" name="name"> <input type="submit" name="submit" value="submit"> </form> <form action="" method="post"> <input type="text" name="name"> <input type="submit" name="submit" value="submit"> </form> <button id="clickAll">Submit All</button>
Вот скрипт php, который генерирует динамические формы с помощью $_SESSION
:
<?php if(isset($_POST['submit'])) : $test = array( 'size' => $_POST['size'], 'color' => $_POST['color'], 'submit' => $_POST['submit'] ); $_SESSION['testing'][] = $test; endif; if(isset($_SESSION['testing'])) : foreach($_SESSION['testing'] as $sav) { ?> <form action="paypal.com/..." method="post"> <input type="text" name="size" value="<?php echo $sav['size']; ?>"> <input type="text" name="color" value="<?php echo $sav['color']; ?>"> <input type="submit" name="submit" value="Click Here to Checkout"> </form> <?php } endif; ?>
Итак, вопрос в том, как я могу отправить все формы с помощью кнопки ONE?
Вы пытались сделать это с помощью $ .ajax? Вы можете добавить foreach или вызвать другую форму в функции Onsucces. Другой подход заключается в том, что все формы преобразуются в одну форму с массивом, который указывает на правильную «абстрактную» форму:
<form action="" method="post"> <input type="text" name="name[]"> <input type="text" name="example[]"> <input type="text" name="name[]"> <input type="text" name="example[]"> <input type="text" name="name[]"> <input type="text" name="example[]"> <button id="clickAll">Submit All</button> </form>
И в php:
foreach ($_POST['name'] as $key => $value) { $_POST['name'][$key]; // make something with it $_POST['example'][$key]; // it will get the same index $key }
Вот рабочий jsFiddle: http://jsfiddle.net/SqF6Z/3/
В принципе, добавьте class
в каждую form
и trigger()
submit в этом class
. Вот так:
HTML (только пример):
<form action="http://www.google.com" method="get" class="myForms" id="1stform"> <input type="text" value="1st Form" name="q1" /> </form> <form action="http://www.google.com" method="get" class="myForms" id="2ndform"> <input type="text" value="2nd Form" name="q2" /> </form> <form action="http://www.google.com" method="get" class="myForms" id="3rdform"> <input type="text" value="3rd Form" name="q3" /> </form> <input type="button" id="clickMe" value="Submit ALL" />
JQuery:
$('.myForms').submit(function () { console.log(""); return true; }) $("#clickMe").click(function () { $(".myForms").trigger('submit'); // should show 3 alerts (one for each form submission) });
FWIW, я делаю это, создавая iframe, делая цель для второй формы, а затем отправляю оба, как это
//create the iframe $('<iframe id="phantom" name="phantom">').appendTo('#yourContainer');
и создать двойную подачу вот так:
function dualSubmit() { document.secondForm.target = 'phantom'; document.secondForm.submit(); document.firstForm.submit(); }
работает!
сначала создайте цикл, чтобы получить все формы id и отправить их в ajax.
<script name="ajax fonksiyonları" type="text/javascript"> function validate(form){ //get form id var formID = form.id; var formDetails = $('#'+formID); $.ajax({ type: "POST", url: 'ajax.php', data: formDetails.serialize(), success: function (data) { // log result console.log(data); //for closing popup location.reload(); window.close() }, error: function(jqXHR, text, error){ // Displaying if there are any errors console.log(error); } }); return false; } //this function will create loop for all forms in page function submitAll(){ for(var i=0, n=document.forms.length; i<n; i++){ validate(document.forms[i]); } }
создать кнопку для отправки в порядке
<a class="btn" id="btn" onclick="submitAll();" href="">Save & Close</a>
затем прекратите вызов ajax после успеха. Также не забудьте войти в консоль.
этот код работает во всплывающем и закрывающемся всплывающем окне после завершения всех ajax.