【问题标题】:Mapping checkbox values to an empty array将复选框值映射到空数组
【发布时间】:2014-08-18 18:36:07
【问题描述】:

我有一系列与复选框相关联的数组。

这是 HTML:

<input type="checkbox" value="value1">Value 1
<input type="checkbox" value="value2">Value 2
<input type="checkbox" value="value3">Value 3

在我的 jQuery 中,我将这些数组定义如下:

var value1 = ['item1', 'item2', 'item3'];
var value2 = ['itemA', 'itemB', 'itemC'];
var value3 = ['item!', 'item@', 'item#'];

我想根据选中的复选框创建一个新数组,并基本上创建一个数组数组。我已经为此尝试了以下代码,但它不起作用:

var newArray = [];
$('input[type=checkbox]:checked').map(function(){
    newArray.push($(this).val());
});

我可以硬编码 newArray 如下:

var newArray = [value1, value2, value3];

newArray 被填充后,我想循环遍历 newArray 中包含的数组的值以选择随机索引并将它们推送到 randArray。如果我按如下方式对 newArray 进行硬编码,则此部分有效:

var newArray = [itemC, item!, item1]

但如果我尝试将复选框值映射到 newArray,它将不起作用。填充 newArray 后,我想确保 newArray 中每个子集的至少一项包含在 randArray 中。我目前遇到的困难部分是根据检查的内容使用子集填充 newArray。

我正在尝试完成的一个示例类似于在 http://passwordsgenerator.net/ 找到的示例

【问题讨论】:

  • 当一个复选框没有被选中时,你想在 newArray 中做什么?
  • 当未选中复选框时,它应该只是一个空数组。
  • JavaScript 无法使用包含第一个名称的另一个变量来访问变量的值。这个概念在 PHP 中叫做“变量”,而 JS 没有这个“特性”。您应该放弃使用名为“value1”、“value2”和“value3”的变量,而是使用对象作为关联数组,然后根据复选框值进行查找。例如:var values = { 'value1': ['item1', ...], 'value2': ['itemA', ...], 'value3': ['item!', ...] };每当您有两个名为“something1”和“something2”的变量时,您可能做错了!
  • 我认为这给了我正确的方向。谢谢你,内特。

标签: javascript jquery html arrays


【解决方案1】:

此语法不将复选框值设置为名称为 value1 的 js 变量的值:

<input type="checkbox" value="value1">Value 1

你可能需要这样的东西:

<input type="checkbox" value="item1,item2,item3">Value 1
<input type="checkbox" value="itemA,itemB,itemC">Value 2
<input type="checkbox" value="item!,item@,item#">Value 3

那么你的 newArray 创建如下所示:

var newArray = [];
$('input[type=checkbox]').map(function () {
    var $cb = $(this);
    if ($cb.is(":checked")) {
        newArray.push($cb.val().split(','));
    } else {
        newArray.push([]);
    }
});

看这个小提琴:

http://jsfiddle.net/slippery_pete/ddpnhww5/1/

【讨论】:

  • 这个解决方案的唯一问题是我想确保当我循环遍历 newArray 时,每个子集中的至少一个值包含在输出中。如果我要求输出 3 个字符长,则输出可能都属于同一个子集,而不是从每个选中的复选框中给我一个随机值。
  • @gjanden 与您提出的问题无关。也许您应该更新问题并添加示例输出。我不知道你在要求什么了;)
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2011-10-13
  • 1970-01-01
  • 2019-08-25
  • 2020-07-22
相关资源
最近更新 更多