我有一个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>
由于 大卫
答案 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();