2011-03-22 30 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();