【问题标题】:How to add pairs of key, value to jQuery array?如何将键、值对添加到 jQuery 数组?
【发布时间】:2018-05-24 03:26:04
【问题描述】:

我有一组复选框,我想将它们包含一对数字的值添加到数组中,然后使用它们。问题是数组只取最后一个复选框的值。我挣扎了很多,但无法弄清楚。

https://jsfiddle.net/zfwbtomu/

HTML:

<div class="scrolly-option" id="input-option20">
    <div>
        <label>
            <input type="checkbox" name="option[20][]" value="20,64">
            <span>Mint</span> </label>
    </div>
    <div>
        <label>
            <input type="checkbox" name="option[20][]" value="20,63">
            <span>Maroon</span> </label>
    </div>
    <div>
        <label>
            <input type="checkbox" name="option[20][]" value="20,62">
            <span>Ecru</span> </label>
    </div>
</div>
<input type="checkbox" class="option1" name="" value="" />
<div class="result"></div>
<button type="button" class="button-cart">ADD</button>

JS:

$('.button-cart').on('click', function(e) {
  e.preventDefault;
  var firstoptoins = [];
  $(".scrolly-option input[type=checkbox]").each(function () {
    if ($(this).prop('checked')) {
      var arr = $(this).val().split(',');
      firstoptoins[arr[0]] = arr[1];
    }
  });

  console.log(firstoptoins);

  $('.scrolly-option .checkbox input[type=checkbox]').prop("checked", false);

  $.each(firstoptoins, function (o, v) {
    $('.option1').attr("name", 'option[' + o + '][]');
    $('.option1').attr("value", v);
    $('.option1').prop('checked', true);
    console.log('o: ' + o + ' v: ' + v);
  });
});

【问题讨论】:

  • 你希望你的数组如何格式化?您正在使用 20 作为数组上所有元素的索引,这就是您只获得最后一个值的原因。
  • 天啊!你是对的!
  • 是的,@Eddie 就在那里,您将第一个 value 用作 index 用于 firstoptions 数组,因此所有值都将复制到同一个索引

标签: jquery arrays forms


【解决方案1】:

您使用第一个数字作为索引,即20,这就是您只能在数组中获取一个元素的原因。

It 元素 firstoptoins[20] 在每个循环中都被替换。

你可以这样做:

var firstoptoins = [];

$(".scrolly-option input[type=checkbox]").each(function () {
        if ($(this).prop('checked')) {
            var arr = $(this).val().split(',');
            firstoptoins.push( [ arr[0], arr[1] ] );
        }
});

console.log(firstoptoins);

这将导致:

[ 
    [ "20", "64" ],
    [ "20", "63" ],
    [ "20", "62" ] 
]

第二个循环是:

$.each(firstoptoins, function (o, v) {
    $('.option1').attr("name", 'option[' + v[0] + '][]');
    $('.option1').attr("value", v[1]);
    $('.option1').prop('checked', true);
    console.log('o: ' + v[0] + ' v: ' + v[1]);
});

第一个号码使用v[0],第二个号码使用v[1]

【讨论】:

  • 非常感谢您的回答。如果您还告诉我如何在数组项之间进行迭代,我将不胜感激。数组的输出是这样的: (3) [Array(2), Array(2), Array(2)] 0 : (2) ["54", "175"] 1 : (2) ["54" , "174"] 2 : (2) ["54", "173"]
  • @Kardo 您给出的示例与输入复选框上的值不同,值为20,64,20,6320,62
  • 我不确定,但我认为,我上面的示例与0 : (2) ["54", "175"] 1 : (2) ["54", "174"] 2 : (2) ["54", "173"]具有相同的格式
  • 对不起,我在尝试另一个产品:(3) [Array(2), Array(2), Array(2)] 0 : (2) ["20", "64"] 1 : (2) ["20", "63"] 2 : (2) ["20", "62"]
  • 感谢一百万!你救了我!
猜你喜欢
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2014-03-28
  • 1970-01-01
  • 2021-09-13
  • 2022-12-28
  • 1970-01-01
相关资源
最近更新 更多