日期:2014-05-17  浏览次数:20825 次

js找不到控件,js高手请进
<head>
<script language="javascript" type="text/javascript">
  var result = "<%=GetArray() %>";
  var objInput = document.getElementById("product_model");
  if (objInput == null) {
  alert("找不到文本框!");
  }
</script>
</head>


问题1: var result = "<%=GetArray() %>";此句不放入js文件,写在html代码中可获得值,放入js文件中result的值就是<%=GetArray() %>
问题2: 会弹出"找不到文本框"!
此问题我用了按钮检测文本框是否为空测试
function check_input1() {
  var ctl = document.getElementById("product_model");
  if (ctl == null) {
  alert("找不到文本框!!!!");
  return;
  } 
  if (ctl.value.length == 0) {
  alert("请输入产品型号!");
  return false;
  }
}
//check_input1();
按钮的click事件调用check_input1方法没问题,但假如我取消注释//check_input1();会报错找不到文本框!!!
求解!!!!!!

------解决方案--------------------
问题1:<%...%>语法是服务器脚本语法,只能在对应的脚本文件(如.asp,.aspx,.jsp,.php等)中被解析。在.js文件中不会对它进行解析,只会把它当作字符串的一部分。

问题2:Html流的执行方向是自上而下,LZ的脚本放在Head标签里,即在Body加载之前。脚本运行时Body里所有的控件都还没加载,当然找不到了。(如果把这段脚本放到要找的文本框后面就可以找到了)
HTML code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>abc</title>
    <!--
    <script type="text/javascript">
        // 放这里会弹出Error!
        var obj = document.getElementById("product_model");

        if (obj)
            alert("OK!");
        else
            alert("Error!");
    </script>
    -->
</head>
<body>
    <input type="text" id="product_model" />
    <script type="text/javascript">
        // 放这里会弹出OK!
        var obj = document.getElementById("product_model");

        if (obj)
            alert("OK!");
        else
            alert("Error!");
    </script>
</body>
</html>

------解决方案--------------------
你在控件没加载呢,就调用,当然找不到了,你可以把你的js放在控件出现的后面,只要后面就行,不一定要在body结束地方.


当然放在head里面,扔到onload事件也可以.

至于你说的单击事件里可以,直接放那里不行:
原因:事件就绪时,文档所有元素都已经就绪了.