2009-10-12 34 views
8

Tại sao chỉ có một giá trị của mảng giá trị hộp kiểm "db" được gửi tới tập lệnh phía máy chủ?Đăng mảng nhiều giá trị hộp kiểm

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> 

Sửa: tôi đã kết thúc việc trả lời câu hỏi của riêng tôi, nhưng không ai có tài liệu hướng dẫn (hoặc giải thích) về việc tại sao Điều này là cần thiết? Thật khó cho tôi để tìm ra câu trả lời chính xác (vì thế bài viết sau khi chết).

+0

Chắc chắn, đó là tài liệu, kể từ khi bạn sử dụng php là tập lệnh phía máy chủ, hãy kiểm tra tại đây: http://www.php.net/manual/en/faq.html.php#faq.html.báo cáo và tại đây: http://www.php.net/manual/ vi/language.variables.external.php –

+1

Một chút về chủ đề, giá trị 'for' của nhãn nên là id đầu vào, không phải là giá trị đầu vào. –

Trả lời

15

Tôi đồng ý với @jjclarkson. Chỉ cần thêm, thay vì đẩy id của bạn đến một mảng, bạn có thể sử dụng $.map:

$(".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; 
}); 
+0

Sử dụng .map() có hiệu quả hơn không? – jjclarkson

+0

@jjclarkson - không chắc chắn, nhưng ngắn hơn và rõ ràng hơn. Điều đó nói rằng, tôi đã sử dụng cách tiếp cận $ .each cho đến khi tôi phát hiện $ .map, tôi đã không nhận thấy bất kỳ sự khác biệt nào, nhưng nói chung, tôi không nghĩ ai sẽ nhận thấy bất kỳ sự khác biệt nào cho một tập dữ liệu cỡ vừa và nhỏ. – karim79

4

Bạn cần có dấu ngoặc vuông để chỉ định mảng [] trên tên biến được gửi.

{'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; 
}); 
1

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

sau đó phát nổ trong PHP $mycheckboxes = explode(',',$_GET['mycheckboxes']);

5
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); } 
}); 
Các vấn đề liên quan