Подтвердить что ты не робот

Как передать несколько флажков с помощью jQuery ajax post

Как передать несколько флажков с помощью jQuery ajax post

это функция ajax

 function submit_form(){
 $.post("ajax.php", {
 selectedcheckboxes:user_ids,
 confirm:"true"
 },
 function(data){
  $("#lightbox").html(data);
  });
 }

и это моя форма

<form>
<input type='checkbox' name='user_ids[]' value='1'id='checkbox_1' />
<input type='checkbox' name='user_ids[]' value='2'id='checkbox_2' />
<input type='checkbox' name='user_ids[]' value='3'id='checkbox_3' />
<input name="confirm" type="button" value="confirm" onclick="submit_form();" />
</form>
4b9b3361

Ответ 1

Из документов jquery для POST (третий пример):

$.post("test.php", { 'choices[]': ["Jon", "Susan"] });

Итак, я просто перебираю флажки и строю массив. Что-то вроде

var data = { 'user_ids[]' : []};
$(":checked").each(function() {
  data['user_ids[]'].push($(this).val());
});
$.post("ajax.php", data);

Ответ 2

Просто наткнулся на это, пытаясь найти решение для той же проблемы. Реализация решения Paul Я сделал несколько настроек для правильной работы этой функции.

var data = { 'venue[]' : []};

$("input:checked").each(function() {
   data['venue[]'].push($(this).val());
});

Короче добавление ввода: проверено, а не: проверено, ограничивает поля, вводимые в массив, только флажками в форме. Павел действительно прав с this, который должен быть заключен как $(this)

Ответ 3

Можно использовать следующее, а затем взорвать результат сообщения explode(",", $_POST['data']);, чтобы получить массив результатов.

var data = new Array();
$("input[name='checkBoxesName']:checked").each(function(i) {
    data.push($(this).val());
});

Ответ 4

Здесь более гибкий способ.

скажите, что это ваша форма.

<form>
<input type='checkbox' name='user_ids[]' value='1'id='checkbox_1' />
<input type='checkbox' name='user_ids[]' value='2'id='checkbox_2' />
<input type='checkbox' name='user_ids[]' value='3'id='checkbox_3' />
<input name="confirm" type="button" value="confirm" onclick="submit_form();" />
</form>

И это ваш jquery ajax ниже...

                // Don't get confused at this portion right here
                // cuz "var data" will get all the values that the form
                // has submitted in the $_POST. It doesn't matter if you 
                // try to pass a text or password or select form element.
                // Remember that the "form" is not a name attribute
                // of the form, but the "form element" itself that submitted
                // the current post method
                var data = $("form").serialize(); 

                $.ajax({
                    url: "link/of/your/ajax.php", // link of your "whatever" php
                    type: "POST",
                    async: true,
                    cache: false,
                    data: data, // all data will be passed here
                    success: function(data){ 
                        alert(data) // The data that is echoed from the ajax.php
                    }
                });

И в вашем ajax.php вы попробуете эхом или print_r свой пост, чтобы увидеть, что происходит внутри него. Это должно выглядеть так. Будут возвращены только отмеченные флажки. Если вы его не проверили, он вернет ошибку.

<?php 
    print_r($_POST); // this will be echoed back to you upon success.
    echo "This one too, will be echoed back to you";

Надеюсь, что это достаточно ясно.

Ответ 5

Если вы не настроите свое собственное решение, ознакомьтесь с этим плагином jQuery:

malsup.com/jquery/form/

Он сделает это и многое другое для вас. Это настоятельно рекомендуется.

Ответ 6

Следующее от Пола Тарьяна работало для меня,

var data = { 'user_ids[]' : []};
$(":checked").each(function() {
  data['user_ids[]'].push($(this).val());
});
$.post("ajax.php", data);

но у меня было несколько форм на моей странице, и он вытащил флажки из всех форм, поэтому я сделал следующую модификацию, поэтому он только вытащил из одной формы,

var data = { 'user_ids[]' : []};
$('#name_of_your_form input[name="user_ids[]"]:checked').each(function() {
  data['user_ids[]'].push($(this).val());
});
$.post("ajax.php", data);

Просто измените name_of_your_form на имя вашей формы.

Я также упомянул, что если пользователь не проверяет какие-либо поля, то в PHP нет массива isset. Мне нужно было знать, не отключил ли пользователь все поля, поэтому я добавил в форму следующее:

<input style="display:none;" type="checkbox" name="user_ids[]" value="none" checked="checked"></input>

Таким образом, если флажки не отмечены, он все равно установит массив со значением "none".

Ответ 7

Это было бы лучше и проще

var arr = $('input[name="user_ids[]"]').map(function(){
  return $(this).val();
}).get();

console.log(arr);