2013-06-11 45 views
0

我有一個頁面有三個複選框列表,這三個是動態生成的 我想要什麼,當用戶點擊複選框的值是通過郵件傳遞,但我只設法趕上第一列表 的埃斯托值,我做了這樣的代碼:我不能採取所有陣列的序列化jquery

  $("body").find(".fcID").click(function(){ 
// var v = $(this).val(); 
    //alert(v); 
    var form = jQuery('#form');  
    valor = form.serialize(); 
    $.ajax({ 
     type : "POST", 
     url:"biblioteca/filtra.php", 
     data: valor, 

     success: function(data){ 
      $("#tabelafiltro").html(data); 
     } 
    }); 

在HTML中,我把形式與她形式的ID和名稱的形式 這種形式中,我有複選框,所以:

 <form name="form" id="form" action="" method="post"> 

<table> 
    <tr> 
     <td><input type="checkbox" class="fcID" value="<?php echo $linha['fm-cod-com'] ?>" name="fcID[]"/></td> 
    </tr> 
</table> 
    <table> 
<tr> 
<td><input type="checkbox" class="fcID" name="fam[]" value="<?php echo $linha['fm-codigo'] ?>" /></td> 
</tr> 
</table> 

</form> 

和php:

$id = $_POST['fcID']; 
$fam = $_POST['fam']; 

echo(count($fam)) . " + " . count($id); 

有人幫我嗎?

+0

您是否嘗試過使用console.log(valor)查看您實際發送的數據? – kajacx

回答

0

你的代碼是正確的,你確定fam []複選框被選中了嗎?複選框只有在屬性checked =「checked」的情況下才會序列化。

0

不幸的是, 「名」 不轉換到的jQuery數組..所以不是這樣的:

echo $_POST['fcID'][0]; // undefined 

你有這樣的

echo $_POST['fcID[]']; // expected value 

我創建了下面。它有一些限制,但應該做你想要的。我很感激你能評價我的答案。

var form = jQuery('#form');  
valor = form.formToObj(); 

// formToObj (c) 2012 Frank Forte. 
// Please contact me for a free license to use on personal or business website 
// @frankforte or frank @ interactinet .com! 
jQuery.fn.formToObj = function() 
{ 
    var obj = {} 
    jQuery("input,select,textarea",this).each(function(){ 
     if(jQuery(this).attr("disabled")){ 
      return; 
     } 

     var n = jQuery(this).attr("name") || jQuery(this).attr("id") 
     var v = jQuery(this).val(); 
     // e.g.<input name="test[one][two][three]" value="hello world"> 

     if(!n.match(/\[/)) 
     { 
      obj[n] = v 
     } 
     else 
     { 
      // get keys of array, e.g. "one","two","three" 
      var keys = [] 
      nkeys= n.split('[') 
      var i = 0; 
      for(k in nkeys) 
      { 
       if(i > 0) 
       { 
        var nk = nkeys[k] 
        if(typeof nk == "string") 
        { 
         if(nk.match(/\]/)) 
         { 
          nk = nk.replace("]","") 
         } 
         keys.push(nk); 
        } 
       } 
       i++ 
      } 
      // name e.g. "test" 
      n = n.replace(/^([^\[\]]+)\[.*$/i,"$1"); 

      // create object and add value then array keys from bottom up 
      var iobj = {} 
      for(i = keys.length; i > 0; i--) 
      { 
       j = i-1; 
       var k = keys[j] 
       if(k==""){k = 0;} 

       if(i == keys.length) 
       { 
        iobj[k] = v 
       } 
       else 
       { 
        iobj[k] = iobj 
       } 
      } 
      // Need to start with obj[n] and add new values under appropriate keys 
      // prevents unsetting or overwriting keys deeper than n 
      if(typeof obj[n] == "undefined") 
      { 
       obj[n] = {} 
      } 
      obj[n][k] = iobj[k] 
     } 
    }) 
    return obj 
}