【问题标题】:Selecting options in selectPicker for sessionStorage在 selectPicker 中为 sessionStorage 选择选项
【发布时间】:2021-02-24 00:10:10
【问题描述】:

所以我创建了一个我的问题的模型。我正在使用 Select Picker 创建我的多选下拉菜单。在页面重新加载时,我想保存通过 sessionStorage 选择的选项。

我的会话存储成功。它获取我的选项的值并将它们存储在我的浏览器中,但是它不会以可视方式显示给用户。

有没有办法使用 Javascript/jquery 在下拉菜单中选择选项?

另外值得一提的是,我的逻辑可能看起来有点矫枉过正,但我​​使用 $(this) 来获取每个名称属性,因为我将在多个表单上使用它。

谢谢!

jsfiddle:https://jsfiddle.net/7Lhwbzs2/3/

<!--Importing CSS stylesheets-->
<link rel="stylesheet" type="text/css"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="{% static 'css/base.css' %}"/>

<!--Importing Javascript-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"
        integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg=="
        crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
        crossorigin="anonymous"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
        crossorigin="anonymous"></script>
            
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/css/bootstrap-select.min.css">

<!-- Latest compiled and minified JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/js/bootstrap-select.min.js"></script>

<div>
  <select class="selectpicker" name="Food" data-none-selected-text="Select Option(s)..." multiple>
       <option value="Pizza">Pizza</option>
       <option value="Wings">Wings</option>
       <option value="Veggies">Veggies</option>
       <option value="Rice">Rice</option>
       <option value="Pasta">Pasta</option>
  </select>
</div>

<script>
    $('select').selectpicker({
    actionsBox: true,
  });
  $('select').each(function( index ) {
    var previousSelection = window.sessionStorage.getItem(`${$(this).attr('name')}`) ? JSON.parse(window.sessionStorage.getItem(`${$(this).attr('name')}`)): [];
    console.log(previousSelection)
  });

  $('select').on("change", function (e){
    window.sessionStorage.setItem(`${$(this).attr('name')}`, JSON.stringify($(this).val()) );
  });
</script>

【问题讨论】:

标签: javascript jquery


【解决方案1】:

你可以像这样使用 selectpicker:

$('.selectpicker').selectpicker('val', previousSelection);

只需用这个替换你的 JavaScript 代码。我测试了它,它工作得很好:

var previousSelection
 $('select').selectpicker({
    actionsBox: true,
  });
  $('select').each(function( index ) {
    previousSelection = 
   window.sessionStorage.getItem(`${$(this).attr('name')}`) ? 
    JSON.parse(window.sessionStorage.getItem(`${$(this).attr('name')}`)): [];
    console.log(previousSelection)
  });

  $('select').on("change", function (e){
    window.sessionStorage.setItem(`${$(this).attr('name')}`, 
   JSON.stringify($(this).val()) );
  });

  $('.selectpicker').selectpicker('val', previousSelection);

【讨论】:

  • 将这行代码放在我的 getItem 调用下,效果很好!谢谢
  • 所以如果我想让它适用于多种形式,你知道最好的方法是什么吗?我申请了两种形式,似乎一种依赖于另一种jsfiddle.net/jp2149tc/8
  • @anon 在这种情况下,您可以为每个下拉菜单使用选择器。例如,对于您将使用的第一个: $('.selectpicker[name=Food1]').selectpicker('val', previousSelection1);对于第二个,您将使用 $('.selectpicker[name=Food2]').selectpicker('val', previousSelection2);使用为每个下拉列表创建 2 个数组。希望有帮助:)
猜你喜欢
  • 2021-07-15
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多