php - 在 jQuery 中收集复选框值并在提交时将其发布

标签 php jquery html arrays codeigniter

我引用过这篇文章:

Post array of multiple checkbox values

还有这个 jQuery 论坛帖子:

http://forum.jquery.com/topic/checkbox-names-aggregate-as-array-in-a-hidden-input-value


我正在尝试使用 jQuery 收集隐藏输入字段中复选框值的数组(或用逗号连接的字符串等)。这是我正在使用的脚本代码:

<script type="text/javascript">
$("#advancedSearchForm").submit(function() {
 var form = this;
 $(form).find("input[name=specialty]").val(function() {
  return $("input:checkbox",form).map(function() {
   return $(this).attr("name");
  }).get().join();
 });
});
</script>

相关 HTML 片段:

<form id="advancedSearchForm" name="advancedSearchForm" method="post" action="<?php echo site_url('/magcm/advancedSearch#results'); ?>">
<input type="checkbox" name="FCM" id="FCM" class="chk" value="FCM" <?php echo set_checkbox('FCM', 'FCM'); ?>/>
<input type="hidden" name="specialty" id="specialty" value="" />
<input class="button" name="submit3" id="submit3" type="submit" value="Search" />

我尝试在 jQuery 中将“submit”更改为“submit3”,这会破坏(显然)。当我 print_r($_POST) 时,复选框正确 POST,但压缩隐藏变量却不然。 (它发布了,但是一个空白值。)使用 CI 的 hack set_value() 函数,复选框正确地持续存在(Derek 需要在主干中实现这个......但那是另一个故事)

我确信我正在做一些错误的事情并且很容易被指出。在过去的 2 个小时里,我一直在用头撞墙,尝试各种功能并更改大量内容,并在 Chrome 开发工具中进行分析(没有显示任何错误)。

感谢帮助。 :)

最佳答案

假设您对每个复选框应用了一个类,也许是“tehAwesomeCheckboxen”。然后

<script>

$("#advancedSearchForm").submit(function() {

     var chkbxValues = $(".tehAwesomeCheckboxen").val();
     $("#specialty").val( chkbxValues.join(",") );

});

</script>

编辑:

我认为 $_POST 数组没有被填充,因为提交是由 JavaScript 引擎在本地处理的。那么...让我们试试这个:

<script>
    var chkbxValues = new Array();

    $(".tehAwesomeCheckboxen").live("change", function(e){
        var val = $(this).val();

        if( $(this).is(":checked") ) {
            if( chkbxValues.length == 0 || chkbxValues.indexOf(val) == -1){
                // Add the value 
                chkbxValues.push(val);
            }
        }
        else {
            // remove the value
            chkbxValues.splice( chkbxValues.indexOf(val), 1 );
        }

        $("#specialty").val( chkbxValues.join(",") );
    });

</script>

这会为复选框本身添加一个事件处理程序,以便选中/取消选中该框会更改隐藏元素。然后您的表单将正常处理其提交。

这更符合您想要做的事情吗?

P.S.那些对此投赞成票的人,请注意我已经修改了我的答案。请验证您是否仍然觉得它有用并相应地调整您的投票。

关于php - 在 jQuery 中收集复选框值并在提交时将其发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5904758/

相关文章:

html - 为什么 Apple 的 native 邮件客户端会截断(不显示)HTML 的结尾?

javascript - 如何引用多个 HTML 元素以用于 javascript/jQuery 函数?

php - 如何在 php.ini 中启用 oci8 (Oracle) 扩展 - PHP 警告 : PHP Startup: in Unknown on line 0

jquery - 如何使用 jquery 设计两类 css

javascript - Google reCAPTCHA 数据回调不起作用

css - 使用 CSS 调整 div 和背景图像的大小以适合页面

php - 在 5 个月的时间跨度内,只应将 3 个用户插入数据库

php - 如何一次在表中插入多行

javascript - 通过ID访问API资源

html - 垂直居中 td 中的绝对 block