【问题标题】:Post array of multiple checkbox values发布多个复选框值的数组
【发布时间】:2010-12-06 03:35:00
【问题描述】:

为什么只有一个“db”复选框值数组的值被发送到服务器端脚本?

JQUERY:

$(".db").live("change", function() {
    $(this).add($(this).next("label")).add($(this).next().next("br")).remove().insertAfter(".db:last + label + br"); 
    var url = "myurl.php";
    var db = [];
    $.each($('.db:checked'), function() {
        db.push($(this).val()); 
    });
    if(db.length == 0) { 
        db = "none"; 
    }       
    $.post(url, {db: db}, function(response) {
        $("#dbdisplay").html(response); 
    });
    return true;
});

HTML:

<input type="checkbox" name="db[]" class="db" value="track"/><label for="track">track</label></br>
<input type="checkbox" name="db[]" class="db" value="gps"/><label for="gps">gps</label></br>
<input type="checkbox" name="db[]" class="db" value="accounting"/><label for="accounting">accounting</label></br>

编辑:我最终回答了我自己的问题,但是有没有人有文档(或解释)说明为什么这是必要的?我很难找到确切的答案(因此是死后的帖子)。

【问题讨论】:

标签: php jquery html forms post


【解决方案1】:

我同意@jjclarkson。只需添加,您可以使用$.map,而不是将您的 id 推送到数组中:

$(".db").live("change", function() {
    $(this).add($(this).next("label")).add($(this).next().next("br")).remove().insertAfter(".db:last + label + br"); 
    var url = "myurl.php";

    var db = $('.db:checked').map(function(i,n) {
        return $(n).val();
    }).get(); //get converts it to an array

    if(db.length == 0) { 
        db = "none"; 
    }       
    $.post(url, {'db[]': db}, function(response) {
        $("#dbdisplay").html(response); 
    });
    return true;
});

【讨论】:

  • 使用.map()是否更高效?
  • @jjclarkson - 不确定,但它更短更清晰。也就是说,在我发现 $.map 之前,我一直在使用 $.each 方法,我没有注意到任何差异,但一般来说,我认为对于中小型数据集,我不会注意到任何差异。
【解决方案2】:

你需要有方括号在提交的变量名上指定一个数组[]。

{'db[]': db}

$(".db").live("change", function() {
    $(this).add($(this).next("label")).add($(this).next().next("br")).remove().insertAfter(".db:last + label + br"); 
    var url = "myurl.php";
    var db = [];
    $.each($('.db:checked'), function() {
        db.push($(this).val()); 
    });
    if(db.length == 0) { 
        db = "none"; 
    }       
    $.post(url, {'db[]': db}, function(response) {
        $("#dbdisplay").html(response); 
    });
    return true;
});

【讨论】:

    【解决方案3】:
    var checkeditems = $('input:checkbox[name="review[]"]:checked')
                           .map(function() { return $(this).val() })
                           .get()
                           .join(",");
    $.ajax({
        type: "POST",
        url: "/index.php/openItems/",   
        data: "ids=" + checkeditems,                                        
        success: function(msg) { $(".mainContainer").html(msg); }
    });
    

    【讨论】:

      【解决方案4】:

      $('input[name="mycheckboxes"]:checked').map(function(){ return $(this).val(); }).get().join(",");

      然后在 PHP 中爆炸 $mycheckboxes = explode(',',$_GET['mycheckboxes']);

      【讨论】:

        猜你喜欢
        • 2012-09-11
        • 2014-11-30
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多