【问题标题】:If checkbox is checked, get the contents of other inputs如果复选框被选中,则获取其他输入的内容
【发布时间】:2015-01-02 19:57:27
【问题描述】:

我正在尝试获取“分组”inputs 的内容,具体取决于是否选中了该“组”的复选框。然后我想获取组中每个输入的内容并将其放入array。下面是由 PHP 循环生成的两个组示例,每个组 input 的名称末尾都会有一个组关联编号。如果需要,我可以更改名称、ID 等。

// Group 1
<input name="hold_1" id="hold_1" value="1" type="checkbox">
<input name="hold_id_1" id="hold_id_1" value="200" type="hidden">
<input name="hold_date_1" id="hold_date_1" value="2014" type="text">

// Group 2
<input name="hold_2" id="hold_2" value="2" type="checkbox">
<input name="hold_id_2" id="hold_id_2" value="250" type="hidden">
<input name="hold_date_2" id="hold_date_2" value="2014" type="text">

这是我可以使用一些帮助的 JQuery 语句。此版本成功获取所有input 值,但不区分检查哪个组。

        var inputs = $('input'), dataArray = {};
        $.each(inputs, function (index, input) {
            dataArray[$(input).attr('id')] = $(input).val();
        });

到目前为止,通过使用各种方法,我只能获得所有输入值(无论是否选中),或者只有复选框值,或者其他一些对我没有用的数据。

如果有帮助,这里是使用该数据数组的.ajax 帖子。这部分工作正常。

            $.ajax({
                url: "something.php",
                data: dataArray,
                type: 'POST',
                success: function (data) {
                    $(doStuff);
                }
            });

感谢任何帮助。

【问题讨论】:

  • 所以你只想得到选中的组?
  • 您的意思是要获取每个输入中的值吗?还是每个附加的名称?
  • 是的,只需要来自已检查组的信息。例如,如果选中hold_1,我需要hold_1hold_id_1hold_date_1 的值,但不需要来自2 组的任何信息。如果组2 也被选中,我也需要它的等效信息。我希望这更有意义。

标签: jquery arrays checkbox


【解决方案1】:

这是一个非常简单的方法,它允许您获取对应复选框被选中的元素的值。

var inputs = $('input'), 
    checks = inputs.filter(':checkbox'),
    dataArray = {};

$.each(inputs, function (index, input) {
    var groupCheckbox = checks.filter('#' + input.id.replace(/_.*_/, '_'));
    if (groupCheckbox.is(':checked')) {
        dataArray[input.id] = $(input).val();    
    }
});

这里唯一的技巧是复选框的 id 是如何构建的:将输入 id 的中心部分 hold_date_1 替换为 _

查看下面的交互式演示。

function getData() {
    var inputs = $('input'), 
        checks = inputs.filter(':checkbox'),
        dataArray = {};
    
    $.each(inputs, function (index, input) {
        var groupCheckbox = checks.filter('#' + input.id.replace(/_.*_/, '_'));
        if (groupCheckbox.is(':checked')) {
            dataArray[input.id] = $(input).val();    
        }
    });
    
    return dataArray;
}

$(':checkbox').on('change', function() {
    var data = getData();
    alert(JSON.stringify(data, null, 4));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="hold_1" id="hold_1" value="1" type="checkbox">
<input name="hold_id_1" id="hold_id_1" value="200" type="hidden">
<input name="hold_date_1" id="hold_date_1" value="2014" type="text">

<input name="hold_2" id="hold_2" value="2" type="checkbox">
<input name="hold_id_2" id="hold_id_2" value="250" type="hidden">
<input name="hold_date_2" id="hold_date_2" value="2014" type="text">

【讨论】:

  • 单击每个复选框时的结果正是我想要/需要的。我对您的checks.filter 部分和您的最后评论有疑问...我可以轻松地将 ID 和名称更改为包含一个 _ 而不是两个,如果是这样,那么声明会是 checks.filter('_') 吗?
  • 您能否发布在使用单个 _ 更改 ID 后的外观?喜欢hold1_name
  • 当然,我可以使用该名称 (hold1_name),但我更多地考虑 holdName_1 的思路,只是将组实例与名称中的最后一个字符分开。我很难破译正则表达式,真的只是想了解您的意图和checks.filter 的使用。我希望这更有意义。
  • 在这种情况下,正则表达式会更复杂:regex101.com/r/sM4rR3/1 具有此名称模式的演示 jsfiddle.net/hjn9s6mm
  • 感谢 jsfiddle 链接,尤其是 regex101 链接 - 非常有帮助!我很惊讶将 id 从一个 _ 更改为两个使它更复杂。再次感谢您的帮助!
【解决方案2】:

使用纯 javascript 你可以做到这一点

function checkAllBoxes () {
    var checkedBox = document.querySelectorAll("[type=checkbox]:checked");
    
    for(var i in checkedBox) {
       console.log(checkedBox[i])
    }
}

var checkAll = document.querySelector("#checkAll");

checkAll.addEventListener("click", checkAllBoxes, false);
<input name=hold_1 id=hold_1 value=1 type=checkbox />
<input name=hold_id_1 id=hold_id_1 value=200 hidden />
<input name=hold_date_1 id=hold_date_1 value=2014 type=text />

<input name=hold_2 id=hold_2 value=2 type=checkbox />
<input name=hold_id_2 id=hold_id_2 value=250 hidden />
<input name=hold_date_2 id=hold_date_2 value=2014 type=text />

<input id=checkAll type=button value=checkMe />

【讨论】:

  • 这看起来像一个“检查所有框”的脚本。如果是这样,我正在寻找的是“选中哪些框”脚本。抱歉,如果我不清楚或不理解您的意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多