序列化jQuery中的复选框

use*_*874 6 checkbox jquery

我有一个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>
   }
Run Code Online (Sandbox Code Playgroud)

JavaScript的

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

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

  $requests = $_POST['show_request'];
  $request_count = count($requests);
  echo 'count: '.$request_count;
  echo $requests[0];
Run Code Online (Sandbox Code Playgroud)

问题是序列化函数只看到第一个复选框并指示它是否已被检查.它没有看到任何其他复选框.有没有人知道为什么其他复选框没有被序列化以及如何处理它?

谢谢大卫

小智 5

引用Jquery 文档:只有“成功的控件”才会序列化为字符串(使用 $(form).serialize() 时)或数组($(form).serializeArray())。仅当选中复选框和单选按钮(“单选”或“复选框”类型的输入)中的值时,才会包含它们。

您可以使用类似的东西来模拟与您期望的类似的行为:

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


bal*_*dre 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
Run Code Online (Sandbox Code Playgroud)

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