Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML错误无法设置null的属性(匿名函数)_Javascript_Html_Error Handling - Fatal编程技术网

Javascript HTML错误无法设置null的属性(匿名函数)

Javascript HTML错误无法设置null的属性(匿名函数),javascript,html,error-handling,Javascript,Html,Error Handling,我试图将文本框值存储到本地存储,但捕获到一个未捕获的TypeError:无法将属性“onclick”设置为null,并且不确定确切原因。一切似乎都被正确引用了。如有任何见解,将不胜感激 <script type="text/javascript"> var save_button = document.getElementById('Save') save_button.onclick = saveData; function saveData() { var input

我试图将文本框值存储到本地存储,但捕获到一个未捕获的TypeError:无法将属性“onclick”设置为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>

var save_button=document.getElementById('save')
save_button.onclick=保存数据;
函数saveData()
{
var input=document.getElementById(“saveServer”);
setItem(“服务器”,input.value);
var storedValue=localStorage.getItem(“服务器”);
};
服务器:
拯救

如果上面没有显示我的问题,那么下面是JSFIDLE中的全部内容:

在元素呈现在页面上之前,您正在查找该元素


由于您在HTML标记和JavaScript面板中包含了脚本块,所以您的小提琴被弄乱了。HTML标记中的一个正在触发错误,因为它没有在onload或documentready状态下运行

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

您的代码在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);
}

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

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

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

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

//

为什么您有一个内联处理程序和一个已定义的侦听器?在我的实际项目中,js仅在索引顶部引用。Figure id将它与JSFIDLE分开。问题仍然是在呈现元素之前调用它。就像我在你走进房间之前叫你的名字一样。我不会得到任何回应。如我在回答中所说,在window.onload或document ready上运行代码。@DenisTulskiy,因为这是跨浏览器的方式,我很高兴我没有任何理由不使用它jquery@denis同意,但如果只用于
load
事件,jquery就太过分了。。