jquery 本地存储getItem和setItem的问题

s1ag04yj  于 2023-03-29  发布在  jQuery
关注(0)|答案(2)|浏览(172)

有没有办法在下面的代码中使用localstorage?只是为了确保您输入的文本即使在刷新后也会保留在您发送的框中。
查询:

$(document).ready(function() {
   var $input1 = $('.textField');
   
   $(".sendTo").on("click", function() {
      var box = $(this).data("sendto");
      $(`[data-box='${box}']`).append($input1.val());
      $input1.val("");
   });
});

网页:

<input class="textField" type="text">
  <div class="sendTo" data-sendto='box1'>send to box 1</div>   
  <div class="sendTo" data-sendto='box2'>send to box 2</div> 
  <div data-box="box1">box 1</div>
  <div data-box="box2">box 2</div>

我有麻烦在哪里放置localStorage.setItemlocalStorage.getItem

roejwanj

roejwanj1#

你可以像这样实现它(更多解释请参见注解):

$(document).ready(function () {

        var $input1 = $('.textField'); 

        // when page is loaded then get possible value from storage
        var val = localStorage.getItem('savedtext');

        // if there is something stored, write it into the inputfield
        if (val != undefined && val != '') {
            $input1.val(val);
        }

        $(".sendTo").on("click", function () {

            // on click save the value of the inputfield to localStorage
            localStorage.setItem('savedtext', $input1.val());

            var box = $(this).data("sendto");
            $(`[data-box='${box}']`).append($input1.val());
            $input1.val("");
        });
    });

如果在输入字段中添加此事件注册,您还可以保存每次按键的数据:

$input1.on("keyup", function () {

    // if you want to save it not only on click
    // but all the time
    localStorage.setItem('savedtext', $(this).val());
});
3okqufwl

3okqufwl2#

要在localstorage.setItem / getItem中使用这段代码,你只需要知道要读取的键。它已经传入了box变量:

var box = $(this).data("sendto");

因此,您可以将其用作:

localStorage.setItem(box, output.text())

要使用getItem进行检索,您可以循环每个具有属性[data-box]的输出,获取.data("box")并将其用作键:

$("[data-box]").each(function() { 
      var box = $(this).data("box");
      var val = localStorage.getItem(box);
      $(this).text(val);
   });

更新代码:

$(document).ready(function() {
   var $input1 = $('.textField');
   
   $("[data-box]").each(function() { 
      var box = $(this).data("box");
      var val = localStorage.getItem(box);
      $(this).text(val);
   });
   
   $(".sendTo").on("click", function() {
      var box = $(this).data("sendto");
      var output = $(`[data-box='${box}']`);
      output.append($input1.val());
      $input1.val("");
      localStorage.setItem(box, output.text());
   });
});

注意:stackoverflow代码段不允许本地存储,所以你可以使用这个小提琴来看看它的运行情况:https://jsfiddle.net/35ugqf6j/
注意:这将清除输出中的默认“box 1”文本-如果您不希望在第一次运行时检查null,则可以检查它。
注意:你需要一个方法来清除output/localstorage,否则它会变得越来越大。

相关问题