序列化jQuery中的复选框

时间:2011-03-22 09:23:45

标签: jquery checkbox

我有一个jQuery表单,我在其中创建了一系列复选框:

<?php
<form method="post" id="b-form" action="../createb.php">
    for ($i=0; $i<$request_count; $i++){
       <div class="request-check">
          <table>
             <tr>
                <td><input type="checkbox" name="show_request[]" value="request".$i."      checked="checked"/>select request</td>
             </tr>
          </table>
        </div>
   }

的javascript

$.ajax({
          type: 'POST',
          url: '../createb.php',
          data: $('#b-form').serialize(),
          success: function (msg){
                alert(msg);
          }
})

目前,createb.php正在测试表单

  $requests = $_POST['show_request'];
  $request_count = count($requests);
  echo 'count: '.$request_count;
  echo $requests[0];

问题是序列化功能只能看到第一个复选框并指示它是否已被检查。它没有看到任何其他复选框。有没有人知道为什么其他复选框没有被序列化以及如何处理它?<​​/ p>

由于 大卫

4 个答案:

答案 0 :(得分:3)

嗯,这是正确的,因为您拥有名称为name和任何id的所有复选框,以便将它们分开。

尝试创建它们:

<input 
    type = "checkbox" 
    id = "ckb_<?php echo $i ?>"
    name = "ckb_<?php echo $i ?>_show_request[]" 
    value = "request".$i."
    checked = "checked"/> select request

我确信$('#b-form').serialize()现在会生成您想要的所有复选框

答案 1 :(得分:3)

引自Jquery documentation:只有&#34;成功控制&#34;序列化为字符串(使用$(form).serialize())或数组($(form).serializeArray())。复选框和单选按钮(类型为&#34;输入&#34;或&#34;复选框&#34;的输入)中的值仅在选中时才包括在内。

您可以使用类似的内容来模拟类似于您期望的行为:

var myCbValuesArray = $("input:checkbox").map(function(){
  return $(this).is(":checked");
}).get();

答案 2 :(得分:2)

你的选择器错了。

尝试:

$('#b-form input:checkbox').serialize()

如果只获得检查输入,请使用:

$('#b-form input:checkbox:checked').serialize()

答案 3 :(得分:1)

这对你有用。

您可以通过

获取选中的复选框值
 $("input[type='checkbox']:checked").serialize();