使用Javascript时,localStorage值始终为空

使用Javascript时,localStorage值始终为空,javascript,jquery,html,Javascript,Jquery,Html,我使用一个函数将值提交到localStorage,另一个函数检索它们并将它们放入网页上各自的输入字段中 我的问题有两方面。retrieve()函数似乎没有任何作用;输入字段中甚至没有Null。其次,我希望onSubmit()函数实际存储输入值 这是两个功能。如您所见,我声明元素和s_元素,并尝试检索它们。但是什么也没发生 function retrieve() { if (typeof(Storage) != "undefined") { var elements = d

我使用一个函数将值提交到
localStorage
,另一个函数检索它们并将它们放入网页上各自的输入字段中

我的问题有两方面。
retrieve()
函数似乎没有任何作用;输入字段中甚至没有
Null
。其次,我希望
onSubmit()
函数实际存储输入值

这是两个功能。如您所见,我声明
元素
s_元素
,并尝试检索它们。但是什么也没发生

function retrieve() {
    if (typeof(Storage) != "undefined") {
        var elements = document.getElementsByTagName('input');
        var s_elements = document.getElementsByTagName('select');
        for (var i=0; i<elements.length; i++) {
            if (elements[i].getAttribute("type") != "submit" && elements[i].getAttribute("type") != "button") {
                e = elements[i];
                e.setAttribute("value", localStorage[e.getAttribute("name")]);
            }
        }
        for (var i=0; i<s_elements.length; i++) {
            s_e = s_elements[i];
            s_e.setAttribute("value", localStorage[s_e.getAttribute("name")]);
        }
    }
}

function onSubmit() {
    var elements = document.forms["forsendur"].getElementsByTagName("input");
    var s_elements = document.forms["forsendur"].getElementsByTagName("select");
    for (var i=0; i<elements.length; i++) {
        if (elements[i].getAttribute("type") != "submit") {
                    e = elements[i];
                    localStorage[e.getAttribute("name")] = e.getAttribute("value");
        }
    }
    for (var i=0; i<s_elements.length; i++) {
                s_e = elements[i];
                localStorage[s_e.getAttribute("name")] = s_e.getAttribute("value");
    }
}

编辑u检索()函数现在可以工作了。我修正了很多打字错误。现在只剩下一个问题。

问题的症结在于您试图使用HTML属性而不是DOM属性来获取输入值

HTML属性如下所示:

可以如下方式访问DOM属性:

document.querySelector('a')。href='0http://example.com“

当浏览器解析站点的HTML文本时,会读取HTML属性。浏览器将创建一个表示html元素的DOM对象,然后以类似以下方式设置属性:

var a = document.createElement('a');
a.setAttribute('href', 'http://example.com')
通常会有与HTML属性等价的DOM属性,比如我上面描述的
.href
属性

这两件事之间的区别(除了访问它们的方式)是,加载HTML页面后的大多数事件都会修改DOM属性,而不是HTML属性-例如,键入
输入将更改相应DOM对象上的
.value
属性,但不会修改HTML属性:

-除非您明确设置,否则HTML属性
值将保持
“hello”
。同时,在输入时,DOM属性
.value
将反映输入中的文本

要在代码中给出一个特定的示例,您需要更改行
localStorage[e.getAttribute(“name”)]=e.getAttribute(“value”)我们也可以看到输入的html吗?或者Javascript没有块作用域。您正在重用内部循环中的
i
变量。另外,添加一些变量,这样您就不必一直键入长属性访问,如
elements[i].getAttribute(“name”)
,这将有助于提高可读性。很抱歉,复制粘贴时出现缩进错误。我将编辑代码以确保可读性。@Gudmundur“retrieve()函数现在可以工作了…现在只剩下一个问题”-如果retrieve可以工作,那么显然存储也可以工作。那么剩下的问题是什么..?存储仍然存储“Null”值。我希望它们存储字段的输入值。JSFIDLE马上就要来了
<input type="button" class="button2" value="Last session" onClick="retrieve();">
var a = document.createElement('a');
a.setAttribute('href', 'http://example.com')