document.getElementById获取控件对象为空的解决方法

本文探讨了JavaScript中页面加载时动态填充数据的问题。详细分析了使用document.getElementById方法获取DOM元素时出现空值的原因,并提供了解决方案,即将JS代码放置在HTML文件末尾以确保元素已加载。
今天写个网页,想在页面加载onLoad时,动态显示由后台其他程序传来的数据时,用document.getElementById获取控件对象总是为空。但是检查了这个id确实是存在的。看下文的示例和解决方法

1.下面是一个简单的例子,页面加载时显示一段信息

 代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <script language="javascript">
          alert("hello!!!");
      </script>
  </head>

  <body onLoad="showMessage()">
      <h1>在页面加载之前,会输出一些信息</h1>
  </body>
</html>

执行后,确实是“在页面加载前,输出了信息”。
2.下面的例子会出现document.getElementById为空的情况。
我的计划是:在页面加载时,在<body></body>的文本框中显示由后台处理来的数据,比如这里的字符串“hello, my friend!”。但是这里通过通过document.getElementById读取的是对象为空。
因为onLoad方法在页面<body></body>加载之前执行,此时id="mes"对应文本框的文本框,还没有加载进去。
unity3d http://www.unitymanual.com/
 代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <script language="javascript">
          var t=document.getElementById("mes");
          t.value="hello, my friend!"
      </script>
  </head>

  <body onLoad="showMessage()">
      the message is:<input type="text" id="mes">
  </body>
</html>

3.解决办法
在加载Html网页时,会加载<html></html>中的所以数据。先加载<head>,再加载<body>。
所以我们可在</body>之后,在</html>之前写入javascript就好了。程序顺序执行,执行到相应的javascript调用就可以执行。不是用onLoad方法。
代码如下:

 代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <body>
          the message is:<input type="text" id="mes">
    </body>

      <!-- 继续执行javascript代码 -->
    <script language="javascript">
          function showMessage()
          {
              var t=document.getElementById("mes");
              t.value="hello, my friend!"
          }
          showMessage();    //调用方法,更新文本框
      </script>
</html>
### 如何通过 `document.getElementById` 获取元素的值 为了正确使用 `document.getElementById` 来获取 HTML 元素中的值,在 JavaScript 中通常会按照如下方式操作: 对于不同类型的输入控件获取其值的方式略有差异。 #### 文本框 (TextBox) 当目标是一个文本框时,可以通过访问 `.value` 属性来取得其中的内容[^3]。 ```javascript function getTextboxValue() { var textbox = document.getElementById('myTextbox'); console.log(textbox.value); } ``` 此代码片段展示了如何定义一个函数用于打印指定 ID 的 `<input type="text">` 或者 `<textarea>` 元素内的文本内容到控制台。 #### 下拉列表 (Dropdown List / Select Box) 针对下拉菜单,则同样利用 `.value` 属性读取当前选中的选项值。 ```javascript function getSelectBoxValue() { var selectBox = document.getElementById('mySelectBox'); console.log(selectBox.value); } ``` 这段脚本适用于处理标准的选择框 (`<select>`) 和多选选择框 (`<select multiple>`), 它们均支持这种方式提取所选项目的值。 #### 单选按钮组 (RadioButtonList) 及 复选框 (CheckBox) 单选按钮和复选框的情况稍微复杂一些,因为它们可能存在于一组之中。要获得这些组件的状态或选定项,可以遍历整个节点集合并检查每一个成员是否被勾选(`checked`属性). ```javascript // 对于单选按钮 function getCheckedRadioValue(nameAttr) { var radios = document.getElementsByName(nameAttr); for (var i = 0; i < radios.length; i++) { if (radios[i].checked) { return radios[i].value; } } } // 对于复选框 function getAllCheckedCheckboxValues(className) { var checkboxes = document.getElementsByClassName(className); var checkedValues = []; for (var j = 0; j < checkboxes.length; j++) { if (checkboxes[j].checked) { checkedValues.push(checkboxes[j].value); } } return checkedValues.join(", "); } ``` 上述两个辅助方法分别提供了处理单选按钮群集以及复选框的方法,前者返回第一个找到的已选中单选按钮的值;后者则收集所有处于选中状态下的复选框对应的值,并以逗号分隔字符串的形式给出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值