Javascript/jQuery - 将项目推送到数组并从数组中删除

Posted

技术标签:

【中文标题】Javascript/jQuery - 将项目推送到数组并从数组中删除【英文标题】:Javascript/jQuery - Pushing items to and removing from array 【发布时间】:2018-02-15 06:48:03 【问题描述】:

我目前有一个分布在多个页面上的复选框列表(分页),其值需要存储在本地存储中,以便我可以在另一个页面的其他位置列出它们。因此,我尝试将所有这些值存储在一个数组中,并通过添加/删除值来不断更新该数组,具体取决于是否已单击复选框。

我目前正在使用以下内容:

var brochuresList = [];

    jQuery('.brochure-select-checkbox').on('click', function () 
        var brochure, brochures = [];

        jQuery('.brochure-select-checkbox').each(function () 
            brochure = id: jQuery(this).attr('id'), checked: jQuery(this).prop('checked'), value: jQuery(this).val();
            brochures.push(brochure);
        );

        localStorage.setItem("brochures", JSON.stringify(brochures));

        for (var i = 0; i < brochures.length; i++) 
            if( jQuery('#' + brochures[i].id).is(':checked') && !brochuresList.includes(brochures[i].value) )
                brochuresList.push(brochures[i].value);
             else (!jQuery('#' + brochures[i].id).is(':checked')) 
                var index = brochuresList.indexOf(brochures[i].value);
                brochuresList.splice(index, 1);
             
        

        console.log(brochuresList);
    );

但是我似乎有一些奇怪的行为。在所有复选框“未选中”的情况下,控制台打印一个空数组,这是正确的。如果我然后单击列表中的第一个复选框,控制台仍然返回一个空数组 - 这是错误的。如果我单击另一个复选框,我会在数组中得到两个正确的复选框。谁能在上面看到我哪里出错了?

【问题讨论】:

开始使用change 而不是click 来读取复选框事件。 @Utkanos 啊...我只能说这是漫长的一天工作!谢谢。 【参考方案1】:

这是我的尝试。您的问题不清楚如何处理复选框上的重复值。我只是假设您要选中和取消选中与您单击的成员具有相同值的每个成员。

另外,我无法在这个 sn-p 上测试 localstorage,它发出了错误。

希望对你有所帮助。

var brochuresList = [];

jQuery('.brochure-select-checkbox').on('click', function() 
  brochure = 
    id: jQuery(this).attr('id'),
    checked: jQuery(this).prop('checked'),
    value: jQuery(this).val()
  ;
  if (brochure.checked) 
    if (brochuresList.indexOf(brochure.value) == -1) 
      brochuresList.push(brochure.value);
    
   else 
    brochuresList.splice(brochuresList.indexOf(brochure.value), 1);
  
  jQuery('.brochure-select-checkbox').each(function() 
    if (jQuery(this).val() == brochure.value) 
      jQuery(this).prop('checked', brochure.checked);
    
  );


  //SO Snippet doesn't allow testing this.
  //localStorage.setItem("brochuresList", JSON.stringify(brochuresList));

  console.log(brochuresList);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<FORM>
  <INPUT id="chk1" type="checkbox" class="brochure-select-checkbox" value=1>
  <INPUT id="chk2" type="checkbox" class="brochure-select-checkbox" value=2>
  <INPUT id="chk3" type="checkbox" class="brochure-select-checkbox" value=3>
  <INPUT id="chk4" type="checkbox" class="brochure-select-checkbox" value=3>
</FORM>

【讨论】:

感谢您 - 让我重回正轨!

以上是关于Javascript/jQuery - 将项目推送到数组并从数组中删除的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript/JQuery/Rails 3 动态添加新行

JavaScript/jQuery:将多个参数传递给 API 中的 POST 请求

Javascript(jQuery)在拖动项目时禁用页面滚动

如何使用 JavaScript/jQuery 按数组或对象中的多个项目进行索引?

任何 Javascript/Jquery 库来验证 SQL 语句?

从纯 Javascript/JQuery 调用 Angular js 函数