使用每个id名称检索数组中所有选中的复选框,并将其传递给PHP

时间:2015-09-17 08:35:36

标签: php jquery arrays

我有一系列复选框:

<input type="checkbox" id="checkbox35080"></td>
<input type="checkbox" id="checkbox23000"></td>
<input type="checkbox" id="checkbox5000"></td>
<input type="checkbox" id="checkbox7000"></td>
<input type="checkbox" id="checkbox65354"></td>

可以同时检查或不检查它们,因为可以检查某些人而不检查其他人。

我需要做的是检索jQuery或Javascript中所有选中的复选框,将它们的子字符串编号存储为数组中的元素,并将此数组传递给PHP。

所以我编写了这个简短的代码示例,以便在我从jQuery传递它时打印PHP数组:

jQuery代码

function foo()
{
   var $substr = "checkbox";
   var $id = "";
   var $checkedBoxes = new Array();

   $("input:checkbox[name=type]:checked").each(function()
   { 
      $id = $(this).attr('id');
      checkedBoxes.push($id.substring($substr.length));
   });

   $("#content").load("file.php", {checkboxes: $checkedBoxes});
}
file.php

中的

PHP代码

<?php
if(isset($_POST["checkboxes"]))
{
   $checkboxes = json_decode($_POST["checkboxes"], true);
   print_r($checkboxes);
}
?>

但是我无法看到输出上打印的数组。 我也尝试过使用 $ _ REQUEST &amp; $ _ GET 方法。没办法,我也不知道自己做错了什么(我不认为jQuery是我的最佳选择)。

我怎样才能完成这项任务?我的代码有什么问题?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

您的代码无效的原因是错误的选择器来定位已检查的元素。它们没有name属性等于type。

您还将数组名称定义为$checkedBoxes。但是你在每个循环中使用变量checkedBoxes。你需要使用:

var $substr = "checkbox";
var $id = "";
var $checkedBoxes = new Array();
$("input:checkbox:checked").each(function(){ 
   $id = $(this).attr('id');
   $checkedBoxes.push($id.substring($substr.length));
});

<强> Working Demo

但是,您可以使用jquery .map()函数缩小代码范围:

var $checkedBoxes =  $("input:checkbox:checked").map(function()   { 
  return this.id.substring($substr.length);
}).get();

<强> Working Demo with .map()

答案 1 :(得分:0)

不是使用jQuery来实现这一点,而是可以简单地使用HTML / php,因为它完全可以实现您的需求。只需将[]添加到名称中,它就会生成为'数组'。像这样:

<input type="checkbox" id="checkbox7000" name="checkboxes[7000]"></td>
<input type="checkbox" id="checkbox35080" name="checkboxes[35080]"></td>
<input type="checkbox" id="checkbox23000" name="checkboxes[23000]></td>
<input type="checkbox" id="checkbox5000" name="checkboxes[5000]"></td>
<input type="checkbox" id="checkbox7000" name="checkboxes[7000]"></td>
<input type="checkbox" id="checkbox65354" name="checkboxes[65354]"></td>

这样你可以避免使用jQuery。另外,作为提醒,表单中的值由name=""提取,而不是id=""

答案 2 :(得分:0)

我发布了解决方案:

HTML代码

<input type="checkbox" name="checkboxPort[]" value="1000">
<input type="checkbox" name="checkboxPort[]" value="1001">
<input type="checkbox" name="checkboxPort[]" value="1002">
<input type="checkbox" name="checkboxPort[]" value="1003">
<input type="checkbox" name="checkboxPort[]" value="1004">
<input type="checkbox" name="checkboxPort[]" value="1005">

jQuery代码

function foo()
{
   var $checkedBoxes = new Array();

  $("input[name='checkboxPort[]']:checked").each(function()
  { 
    $checkedBoxes.push($(this).val());
  });

  $("#content").load("file.php", {checkboxes: $checkedBoxes});
}

PHP代码

if(isset($_POST["checkboxes"]))
{ 
  $checkboxes = $_POST["checkboxes"];
  print_r($checkboxes)
}

谢谢你们两位!

答案 3 :(得分:0)

在小提琴中找到附带的演示

<强> sql fiddle demo

$(document).ready(function() {
    function updateTextArea() {
        var allVals = [];
        $('#mydiv :checked').each(function () {
            allVals.push($(this).val());
        });
        $('#UserRole').val(allVals);
    }
    $(function () {
        $('#mydiv input').click(updateTextArea);
        updateTextArea();
    });
});

在这里,我采用了textarea,您可以通过逗号分隔保存和检索textarea中的复选框选择。