我无法将所有数组用于序列化jquery

时间:2013-06-11 14:26:47

标签: php jquery

我有一个包含三个复选框列表的页面,这三个是动态生成的 我想要的是,当用户点击复选框值时,通过帖子传递,但我只设法捕获第一个列表的Esto值 我做了这样的代码:

         $("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);
有人帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您的代码是正确的,您确定已检查fam []复选框吗?只有在检查了属性=“已检查”的情况下,复选框才会序列化。

答案 1 :(得分:0)

不幸的是,“name”没有被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
}