1

我正在尝试将文本框值存储到本地存储,但是我遇到了 Uncaught TypeError: Cannot set property 'onclick' of null 并且不确定原因。一切似乎都被正确引用了。任何见解将不胜感激。

<script type="text/javascript">
var save_button = document.getElementById('Save')
save_button.onclick = saveData;

function saveData()
{
    var input = document.getElementById("saveServer");
    localStorage.setItem("server", input.value);
    var storedValue = localStorage.getItem("server");
};
</script>    

<label for="serveri">Server:</label>
<input type='text' name="server" id="saveServer" />
<button onclick="saveData()" type="button" value="Save" id="Save">Save</button>

如果上面没有显示我的问题,这是 JSFiddle 中的全部内容:http: //jsfiddle.net/mGfeu/

4

4 回答 4

1

在正文之后编写脚本。执行脚本时不会加载 DOM。因此没有 id 为“Save”的元素。

于 2013-10-23T13:26:13.883 回答
1

您的代码在 DOM 准备好之前运行(因此.getElementById无法找到您的元素

将您的代码更改为

// attach events for all browsers
var prefix = window.addEventListener ? "" : "on";
var eventName = window.addEventListener ? "addEventListener" : "attachEvent";
  document[eventName](prefix + "load", init, false);


function init() {
    var save_button = document.getElementById('Save');
    save_button.onclick = saveData;
}

function saveData() {
    var input = document.getElementById("saveServer");
    localStorage.setItem("server", input.value);
    var storedValue = localStorage.getItem("server");
    alert(storedValue);
}
于 2013-10-23T13:30:16.610 回答
0

如果您取出脚本(您只需要包含正文中的 html)并将其仅放在 js 区域中,您的小提琴就可以工作,因为这是使用 onload 脚本进行渲染:

http://jsfiddle.net/spacebean/mGfeu/1/

它正确地返回了 localStorage 元素,并且一切都设置得很好。

对于您的代码,只需确保将其包装在 onload 事件中,例如:

<script type="text/javascript">
//<![CDATA[
    window.onload=function(){ /* your js here */ }
//]]>

于 2013-10-23T13:32:41.910 回答
0

您正在寻找在页面上呈现之前的元素。

你的小提琴搞砸了,因为你在 HTML 标记和 JavaScript 面板中包含了脚本块。HTML 标记中的那个正在触发错误,因为它没有在 onload 或文档就绪时运行。

于 2013-10-23T13:21:48.720 回答