2011-03-22 84 views
6

我有一个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> 
    } 

的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]; 

问题是serialize函数只能看到第一个复选框,并指出它是否已经被che不管是不是。它没有看到任何其他复选框。有没有人有一个想法,为什么其他复选框没有序列化,该怎么办?

感谢 大卫

+0

得到选择复选框值可你也在这里贴上您的脚本生成的HTML代码?你粘贴在这里的代码看起来很奇怪吗?! – 2011-03-22 09:29:21

回答

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 

我敢肯定,只要你想他们

2

你的选择是错误的$('#b-form').serialize()现在将产生的所有复选框。

尝试:

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

对于只得到确认输入,使用:

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

报价从Jquery documentation:只有使用$当 “成功控制” 被序列化到字符串((形式)。 serialize())或数组($(form).serializeArray())。仅当检查复选框和单选按钮(“收音机”或“复选框”类型的输入)时,才会包含这些值。

您可以使用这样的仿效类似的行为对你期待什么:

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

这会为你工作。

您可以通过

$("input[type='checkbox']:checked").serialize();