javascript - 全局变量不起作用

时间:2017-12-08 22:01:16

标签: javascript variables

我有一个我想要保存的变量,以便多个函数可以使用它。我按照w3schools的指示,但它没有工作。我忘记了什么吗?提前谢谢。



var name = document.getElementById('name').value;

function complete() {
 document.getElementById('demo').innerHTML = name;
}




1 个答案:

答案 0 :(得分:3)

有几件事需要考虑:

  • 如果你有代码试图找到一个元素,但该元素甚至还没有被浏览器读过,那么浏览器就无法找到它。因此,请确保您的代码仅在加载完整DOM后运行 将脚本放在结束body标记之前。
  • 不要尝试在页面上立即获取表单字段的值 加载因为用户还没有输入任何内容,所以 value将毫无意义。您需要设置代码,以便在适当的时间(在用户有机会输入表单字段之后)调用您的函数,因此只有在该时刻到来时才能获取该值。
  • 不要将任何元素命名为name,因为全球window object有一个名为name的属性,默认为空字符串 当您尝试访问name时,它可能会错误地尝试 获取window.name而不是名为name的元素。
  • 只有表单字段具有value属性。所有其他元素都有 .textContent(当字符串不包含任何HTML或您时使用 想要显示实际的HTML代码,而不是解析)和 .innerHTML(当字符串包含HTML并且您想要时使用 该代码已解析)。

最后,帮自己一个忙,不要使用W3Schools。众所周知,它已经过时或没有错误的信息。而是使用 Mozilla Developer's Network ,它被认为是客户端Web开发文档的最佳资源之一。



<input type="text" id="userName">
<input type="button" value="Click Me!" id="btn">
<div id="demo"></div>

<script>
  // Set up the button's click event handling function
  document.getElementById("btn").addEventListener("click", complete);
  
  // Only get a reference to the element, not its value because, at this point,
  // the user hasn't had a chance to type anything into it.
  // Also, getting a reference to the element is the best approach because, if
  // you decide you want some other property of the same element later, you'd have
  // to scan the document for the same element again.
  var theName = document.getElementById('userName');

  function complete() {
   // Now, just get the current value of the textbox at this moment in time
   document.getElementById('demo').textContent = theName.value;
  }
</script>
&#13;
&#13;
&#13;