【问题标题】:How to get the value of selected select using localStorage如何使用 localStorage 获取选定选择的值
【发布时间】:2018-01-29 15:11:14
【问题描述】:

我正在尝试使用 localStorage.getItem() 获取选定选择的值,但它给了我一个错误。

这是我的选择:

            <div class="field">
                <label>Work Area</label>
              <select class="ui fluid dropdown work_area" id="work_area" name="work_area">
                  <option selected value="">Select Work Area.</option>
                  <?php selectWorkArea(); ?>
              </select>

            </div>

这是我的 PHP 函数

 function selectWorkArea(){
    $conn = New Connection;
    $sql = "SELECT DISTINCT work_area FROM machine ORDER BY work_area ASC";
    $qry = $conn->select($sql,NULL,'0129180857');
    while($row= $qry->fetch(PDO::FETCH_OBJ)){
        $work_area = $row->work_area;
        echo "<option data-value='$work_area' >$work_area</option>";
    }

 }

这是我的 Javascript

 var select = document.querySelector(".work_area");
      var selectOption = select.options[select.selectedIndex];
      var lastSelected = localStorage.getItem('select');
      if(lastSelected) {
          select.value = lastSelected; 
      }
      select.onchange = function () {
        lastSelected = select.options[select.selectedIndex].value;
        console.log(lastSelected);
        localStorage.setItem('workarea', lastSelected);

     }

我得到了这个错误: Error image click here

但是当我尝试将我的选择更改为这个时,它工作得很好

        <div class="field">
                <label>Work Area</label>
                <select class="ui fluid dropdown work_area" id="work_area" name="work_area">
                  <option selected value="">Select Work Area.</option>
                  <option  data-value="1">1</option>
                  <option data-value="2">2</option>
                </select>
        </div>

click here to see the image

【问题讨论】:

  • 你有localStorage.getItem('select')localStorage.setItem('workarea', lastSelected) 你有两个不同的名字是正确的吗?因为如果我将select 更改为workarea 那么它就可以了。
  • 尝试将echo "&lt;option data-value='$work_area' &gt;$work_area&lt;/option&gt;";更改为echo '&lt;option data-value="$work_area" &gt;$work_area&lt;/option&gt;';
  • 能否在select.value =之前给出console.log(select)的输出
  • Jason 只需将getItem('select') 更改为getItem('workarea') 或将localStorage.setItem('workarea', lastSelected) 更改为localStorage.setItem('select', lastSelected)
  • 我通过删除data-value 属性中的“数据”得到它。但我的新问题是刷新页面时数据被删除我尝试使用这个localStorage.setItem('workarea',$('.work_area').val())但数据仍然被删除

标签: javascript php local-storage


【解决方案1】:

我通过删除data-value 属性中的data 解决了这个问题。之后,我尝试刷新页面并删除了 select 的值。这是不好的。解决办法是修改javascript,修改如下:

Javascript 代码:

      $('#work_area').val(localStorage.workarea);
      localStorage.setItem('workarea','');
      var select = document.querySelector(".work_area");
      var selectOption = select.options[select.selectedIndex];
      var lastSelected = localStorage.getItem('select');
      if(lastSelected) {
          select.value = lastSelected; 
      }
      select.onchange = function () {
        lastSelected = select.options[select.selectedIndex].value;
        localStorage.setItem('workarea', lastSelected);

      }

html代码:

         <div class="field">
            <label>Work Area</label>
            <select class="ui fluid dropdown work_area" id="work_area" name="work_area">
              <option selected value="">Select Work Area.</option>
               <?php selectWorkArea(); ?>
             </select>
         </div>

PHP函数代码:

 function selectWorkArea(){
    $conn = New Connection;
    $sql = "SELECT DISTINCT work_area FROM machine ORDER BY work_area ASC";
    $qry = $conn->select($sql,NULL,'0129180857');
    while($row= $qry->fetch(PDO::FETCH_OBJ)){
        $work_area = $row->work_area;
        echo "<option value='$work_area' >$work_area</option>";
    }

}

【讨论】:

    【解决方案2】:

    使用前检查是否为空。

    if (localStorage.getItem("select") === null) {
      var lastSelected = localStorage.getItem('select');
      select.value = lastSelected; 
    }
    

    【讨论】:

    • 我通过删除数据值属性中的“数据”得到它。但我的新问题是刷新页面时数据被删除我尝试使用这个 localStorage.setItem('workarea',$('.work_area').val()) 但数据仍然被删除
    • 在页面重新加载时选择更改和休息值时在本地存储上设置项目。您可以在https://jsfiddle.net/shree/sgb4888k/225/上查看我创建的示例演示。如果你运行 fiddle multi-pal time 你可以看到结果。
    • 感谢兄弟的想法。我知道了。我会在这里为任何需要这个的人发布答案。谢谢。
    • 如果它可以帮助您找到问题,请接受答案。快乐编码:)
    猜你喜欢
    • 2011-01-23
    • 2019-10-15
    • 2011-03-13
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2021-12-20
    相关资源
    最近更新 更多