javascript - 本地存储错误

标签 javascript jquery html

请有人告诉我我写的代码有什么问题。

Js

 $("button").click(function() {
          document.getElementById("demo").innerHTML = document.getElementById("asd").value;
      });
        $(function() {
            var edit = document.getElementById('demo');
            $(edit).blur(function() {
                localStorage.setItem("data1", this.innerHTML)
            });
            if (localStorage.getItem("data1")) {
                edit.innerHTML = localStorage.getItem("data1");
            }
        });

HTML

<input type="text" id="asd">
<button>asdsad</button>
<p id="demo"></p>

但同样的代码在这方面工作得很好:

Js

$(function() {
            var edit = document.getElementById('demo');
            $(edit).blur(function() {
                localStorage.setItem("data1", document.getElementById("demo").innerHTML)
            });
            if (localStorage.getItem("data1")) {
                edit.innerHTML = localStorage.getItem("data1");
            }
        });

HTML

<div contenteditable="true" id="demo">Some text here</div>

请有人告诉我这里出了什么问题。

最佳答案

当您将 edit 变量(包含 DOM 元素)作为参数传递给 jQuery 时,将返回一个 jQuery 对象。这会将 blur 事件中的 this 的范围更改为 jQuery 对象。 jQuery 没有 innerHTML 的属性,所以它返回 undefined。 JavaScript DOM 元素当然有 innerHTML 属性,所以这就是第二个示例起作用的原因。

修复第一个示例的一种方法是替换它:

$(edit).blur(function() {
    localStorage.setItem("data1", this.innerHTML)
});

有了这个:

$(edit).blur(function() {
    localStorage.setItem("data1", $(this).html());
});

关于javascript - 本地存储错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350352/

相关文章:

javascript - 如何隐藏图像?我能怎么做?

javascript - react 并使用 ReactDOM.createPortal() - 目标容器不是 DOM 元素错误

javascript - 禁用输入以便将它们排除在 POST 之外?

javascript - 确定哪些文本因溢出而被隐藏 : hidden

javascript - FileReader JS Api 在准备就绪之前调用 Fire

php - WordPress 输出消息

javascript - 将动态构建的表单元素附加到我的表单

javascript - 在发起/来源处阻止跨域 XHR 或获取调用

javascript - jHtmlArea 不适用于 jQuery 1.9.1 及更高版本 - 怎么办?

html - 由于里面的内容,在 anchor 标签的帮助下填充按钮似乎宽度不一样