signed

QiShunwang

“诚信为本、客户至上”

localstorage增删改查易踩坑

2021/3/21 10:03:47   来源:

localstorage增删改查易踩坑

jQuery阶段作品是做一个具有增删改查功能的后台系统(模拟增删改查,不牵涉数据库),遇到了一些问题,耗费了很多时间,今天我将其总结一下。

一.juery动态添加Dom节点,原点击事件无效的方法。

详细看以下代码:

<div id="box">
        <span class="One">我是原有标签,点击我控制台输出信息</span>
    </div>

<script>
        //新生成的元素点击无效果
        $(".One").click(function() {
                console.log("我是一个标签");
                $("#box").append('<br><span class="spanOne">我是新生成的标签,点击我控制台没有效果</span><br>')
            })
</script>            

解决方法如下:

  $(document).on('click', function() {
         console.log("我是一个标签");
         $("#box").append('<br><span class="One">我是新生成的标签,点击我此时有效果</span><br>')

     })
  //   $("#box") 为新增加的dom节点所在的父元素, '.spanOne'是添加节点的class属性
  
    或者
    
     $("#box").on('click', '.One', function() {
             console.log("我是一个标签");
             $("#box").append('<br><span class="One">我是新生成的标签,点击我此时有效果</span><br>')
         })
         //以上的两种方式都可以,都是利用了事件的捕获

刚开始这个问题一直解决不了,然后也试过刷新页面,即location.reload(),来动态添加,但是这种方法是绝对达不到使用要求的,而以上方法则可以完美解决。

二.切换头像图片的问题

这个问题当时花费了很长时间,最后也是问问了同学才得到解决,具体代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .pictures {
            width: 166px;
            height: 166px;
            background-color: #fff;
            border-radius: 50%;
            border: 1px solid black;
        }
    </style>
</head>

<body>
    <input type="file" id="imgfile" method="post" enctype="multipart/form-data">
    <button type="button" onclick="ToBase64();" style="width: 100px;height: 100px;">点击我!!!</button>
    <div class="pictures">
        <img src="" id="png">
    </div>
    <script>
        function ToBase64() {
            var img = document.getElementById('imgfile')

            console.log(img)
            var imgFile = new FileReader();
            //创建一个filereader对象,可以将读取到的文件编码成Data URL。
            var imgData;
            imgFile.readAsDataURL(img.files[0]);
            imgFile.onload = function() {
                imgData = imgFile.result; //base64数据  
                //返回上次click事件的值
                console.log(imgData);
                var png = document.getElementById("png");
                png.src = imgData;
            }
        }
    </script>
</body>

</html>

效果如下:

切换头像图片demo

三.localstroage存储demo

实例如下:

<!DOCTYPE html>
 <html lang="en">
 <head>
      <meta charset="UTF-8">
     <title>HTML5-任务列表</title>
  </head>
  <body>
 
  <div>
     <input id="shuru" type="text" width='200'></input>
     <input id="save" type="button" value="保存"/>
     <input id="clearMsg" type="button" value="清空本地存储"/>
     <p style="color: #286090;font-size: 20px;">任务列表</p>     <hr/>
     <div id="todoList"></div>
 </div>
 <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
 <script>
     // 从本地存储加载任务列表
     var msgList = localStorage.getItem("msgList");
     /*
     localStroage.getItem(key):获得指定key本地存储的值
     localstroage.setItem(key,value):将value存储到key字段
     localstroage.removeItem(key):删除指定key本地储存的值
     */
 console.log(msgList);
     if (msgList !== null && msgList !== undefined && msgList != ' ') {
         // 展示任务列表
         document.getElementById("todoList").innerHTML = msgList;
     }
     // 添加并保存单个任务
     $("#save").click(function () {
         var shuru = document.getElementById("shuru").value;
         if (shuru == null || shuru == '') {
             alert("请输入任务")
             return;
         }
         var todoMsgHtml = '<h5><span style="color: red">任务:</span>' + shuru + '</h5>';
         // 追加到任务列表
         msgList = (msgList == null ? '' : msgList) + todoMsgHtml;
         localStorage.setItem("msgList", msgList);
         // 刷新任务列表
         document.getElementById("todoList").innerHTML = msgList;
     });
     // 清空任务列表并刷新浏览器
     $("#clearMsg").click(function () {
         localStorage.clear();
         document.getElementById("clearMsg").innerHTML = "";
         location.reload();
     });
 </script>

 </body>
 </html>

此例子可以很好的理解怎么使用localstroage来进行存储的。

以上就是我今日的分享。。