如何使用jQuery ajax post传递多个复选框

时间:2009-05-26 02:33:58

标签: javascript jquery html ajax

如何使用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>

7 个答案:

答案 0 :(得分:47)

从POST(3rd example)的jquery文档:

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

所以我只是遍历选中的框并构建数组。像

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

答案 1 :(得分:16)

刚刚遇到这个尝试找到同一问题的解决方案。实现Paul的解决方案我做了一些调整以使这个功能正常。

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

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

简而言之,添加了输入:checked而不是:checked将输入到数组中的字段限制为仅在表单上的复选框。保罗确实是正确的,this需要被$(this)

括起来

答案 2 :(得分:10)

可以使用以下内容然后展开帖子结果explode(",", $_POST['data']);以提供一系列结果。

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

答案 3 :(得分:5)

这是一种更灵活的方式。

让我们说这是你的表格。

<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";

希望足够清楚。

答案 4 :(得分:2)

如果您没有开始推出自己的解决方案,请查看此jQuery插件:

malsup.com/jquery/form /

它会为你做更多的事情。强烈推荐。

答案 5 :(得分:1)

这会更好更容易

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

console.log(arr);

答案 6 :(得分:1)

Paul Tarjan的以下人员为我工作,

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中没有设置数组。我需要知道用户是否取消选中所有框,因此我将以下内容添加到表单中,

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

这样,如果没有选中框,它仍会将数组设置为&#34; none&#34;。