我有一个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)
嗯,确实如此,因为您拥有所有带有名称的复选框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()现在会生成您想要的所有复选框