0 0

新手问题:JavaScript中getElementById()为空或不是对象 怎么解决20

test.js

var ie = WScript.createobject("InternetExplorer.Application");
var eoms1 = "http://xxx.com/url1/";
var eoms2 = "http://xxx.com/url2/";
ie.Navigate(eoms1);
SynchronizeIE();//等待ie加载完成
var doc = ie.document;
var bb = doc.getElementsByName("submit");
doc.forms[0].j_username.value = "xxxxx";
doc.forms[0].j_password.value = "xxxxx";
bb[0].click();  
//上面自动登陆该网站,可正确执行

SynchronizeIE();//等待ie加载完成
ie.Navigate(eoms2);
SynchronizeIE();//等待ie加载完成
var doc2 = ie.document;
ie.Visible = true;
SynchronizeIE();//等待ie加载完成
var dutyDOM = doc2.getElementById("dutymain").getElementById("topbar1").getElementsByTagName("td");
这里出错,提示"doc2.getElementById()为空或不是对象!"
dutyDOM[1].fireEvent("onclick");
SynchronizeIE();

function SynchronizeIE() {                //等待ie加载完成
    while(ie.Busy) {
        WScript.Sleep(100);
    }
}

 


xxx.com/url2查看到的源代码:

<DIV [color=#FF0000]id=dutymain[/color]><TABLE width="100%" border=0 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:user="http://mycompany.com/mynamespace" 
xmlns:xslt="http://www.w3.org/TR/WD-xsl">
<TBODY>
<TR>
<TD vAlign=top>
<DIV id=toolBar>
<TABLE id=topbar1 
style="BORDER-RIGHT: 1px outset; BORDER-TOP: 1px outset; FONT-SIZE: 12pt; BORDER-LEFT: 1px outset; BORDER-BOTTOM: 1px outset" 
borderColor=#f5f5f1 height=35 cellSpacing=2 cellPadding=0 width=120 
bgColor=#c0cef3 border=0>
<TBODY>
<TR>
<TD onmousedown="this.style.border='2 #cccccc inset';" 
onmouseover="this.style.border='2 #eeeeee outset';this.style.cursor='hand'" 
style="BORDER-RIGHT: #ffffff 2px; BORDER-TOP: #ffffff 2px; BORDER-LEFT: #ffffff 2px; CURSOR: hand; BORDER-BOTTOM: #ffffff 2px" 
onclick=self.print(); onmouseout="this.style.border='2 #ffffff'" vAlign=center 
noWrap><IMG src="http://xxx.com/url11/images/print.gif" border=0><FONT 
color=darkblue>打印</FONT></TD></TR>
<TR class=topbar vAlign=center align=left>
<TD onmousedown="this.style.border='2 #cccccc inset';" 
onmouseover="this.style.border='2 #eeeeee outset';this.style.cursor='hand'" 
style="BORDER-RIGHT: #ffffff 2px; BORDER-TOP: #ffffff 2px; BORDER-LEFT: #ffffff 2px; CURSOR: hand; BORDER-BOTTOM: #ffffff 2px" 
onclick="getDutyWork('DUTY_WORK_CHECK')" 
onmouseout="this.style.border='2 #ffffff'" vAlign=center noWrap><IMG 
src="http://xxx.com/url11/images/filesselected.gif" border=0><FONT 
color=darkblue>巡检记录</FONT></TD></TR>
<TR>
<TD onmousedown="this.style.border='2 #cccccc inset';" 
onmouseover="this.style.border='2 #eeeeee outset';this.style.cursor='hand'" 
style="BORDER-RIGHT: #ffffff 2px; BORDER-TOP: #ffffff 2px; BORDER-LEFT: #ffffff 2px; CURSOR: hand; BORDER-BOTTOM: #ffffff 2px" 
onclick="getDutyWork('DUTY_WORK_AFFAIR')" 
onmouseout="this.style.border='2 #ffffff'" vAlign=center noWrap><IMG 
src="http://xxx.com/url11/images/menu_link_default.gif" border=0><FONT 
color=darkblue>事务记录</FONT></TD></TR>
.....下面还有

 
xxx.com/url2 页面中   之间的代码是加载另外一个xsl文件得到的
如果说页面没有加载完成,我手动点击那个连接是有效的啊

 

2010年1月26日 20:25

7个答案 按时间排序 按投票排序

0 0

<script type="text/javascript" defer="defer">

加上defer这个属性,这个表示document加载完后,才开始加载script标签的内容

2010年2月03日 13:45
0 0

就是加载顺序问题。浏览器加载到这行语句doc2.getElementById("dutymain")的时候这个dutymain对象浏览器还没有加载。所示会报这种错误。
如果你把这句代码放到一个函数中。等页面加载完毕了再去执行这个函数就不会报错了。可以用window.onload事件来执行这个方法。

2010年2月03日 11:02
0 0

function $(id){
if(document.all){
   return document.all[id];
}else{
   return document.getElementById(id);
}

}
如果这样不行的话,建议lz找一个jquery的源码,研究一下jquery里面的对象是如何获取的

2010年2月03日 08:42
0 0

js是纯解释型语言。
是按照游览器解析HTML页面的顺序进行执行的。
所以这点在开发的时候要特别注意。
如很多框架都提供了这样一个方法,用来判断页面的dom是否全部加载完成。
如jquery的

$(function(){
   alert('加载完毕');
})

2010年2月01日 07:31
0 0

# var dutyDOM = doc2.getElementById("dutymain").getElementById("topbar1").getElementsByTagName("td"); 
不知道你这样写意图何在?

2010年1月27日 18:05
0 0

doc2.getElementById("dutymain").getElementById("topbar1").getElementsByTagName("td");
这个语句doc2.getElementById("dutymain")得到的是一个<div>
而getElementById("")是document对象才有的方法,<div>
并没有这个方法,所以doc2.getElementById("dutymain").getElementById("topbar1")应该是不对的吧!

2010年1月27日 11:22
0 0

getElementById为空,除了这个ID不存在外,往往是因为js在该ID定义的html前就执行了的原因。

<script>
// 不在function内的js
getElementById("abc") // 这里会为空
</script>
<div id="abc"></div>
<script>
// 不在function内的js
getElementById("abc") // 这里不会为空
</script>

2010年1月27日 10:29

相关推荐

    适合新手学习的JavaScript实例(精)

    JavaScript,作为全球最广泛使用的编程语言之一,是构建网页交互性与动态...在实践中,不断尝试、分析和解决问题,是提升JavaScript技能的关键步骤。记得理论结合实际,多做练习,你会在JavaScript的世界里游刃有余。

    李炎恢JavaScript全套课程讲义

    6. 对象:JavaScript对象是键值对的集合,可以通过字面量方式或构造函数创建。理解属性访问和对象方法是关键。 7. 原型与继承:JavaScript采用原型链实现继承,每个对象都有一个隐含的`__proto__`属性,指向其构造...

    JavaScript_javascript_

    JavaScript,简称为JS,是一种广泛应用于网页和网络应用...对于新手而言,理解并掌握这些基础概念是成为熟练JavaScript开发者的第一步。通过实践和不断学习,你将能够驾驭这门强大的脚本语言,为Web开发带来无限可能。

    javascript帮助文档

    6. **Promise和异步编程**:JavaScript的异步编程模型,如回调函数、Promise和async/await,用于解决复杂的异步操作,避免回调地狱,提高代码可读性和维护性。 7. **ES6及后续版本的新特性**:包括箭头函数、模板...

    JavaScript新手指南

    ### JavaScript新手指南知识点详解 #### 一、JavaScript简介与历史 - **定义**: JavaScript是一种轻量级的编程语言,主要用于网页交互设计,是现代Web开发不可或缺的一部分。 - **历史**: JavaScript由Netscape...

    400多种Javascript应用实例源码.rar

    在实际工作中,遇到类似问题时,可以参考这些实例,快速找到解决方案。 这个压缩包对于初学者来说是一份宝贵的资源,可以边学边练,加深理解;对于有经验的开发者,也是复习和查找灵感的好材料。无论是想要巩固基础...

    javascript 手册(W3Cschool 版本)

    手册内容涵盖JavaScript的基础语法、对象、函数、DOM操作、事件处理、AJAX、BOM等方面,旨在帮助初学者快速上手,同时也为有经验的开发者提供参考。 1. **基础语法**:JavaScript的基础包括变量声明(var, let, ...

    JavaScript新手开发技巧

    在探讨《JavaScript新手开发技巧》这一主题时,我们不仅会深入理解给定的代码片段,还会全面解析JavaScript的基础知识和高级技巧,旨在帮助初学者掌握这门强大的编程语言。JavaScript是一种广泛使用的脚本语言,尤其...

    常用javascript脚本,网站开发人员的手册

    3. **函数**:JavaScript中的函数不仅是可调用的,也可以作为值传递,甚至可以作为对象属性或数组元素存在。函数表达式和箭头函数(ES6新增)是两种常见的定义函数的方式。 4. **对象与原型链**:JavaScript的对象...

    轻轻松松学用JavaScript 编程

    - 字符串和日期对象:字符串对象提供了一系列用于文本操作的方法,如`indexOf()`、`replace()`等;日期对象则用于处理日期和时间,如`getDate()`、`getMonth()`等。 - 桢结构和框架窗口:JavaScript可以用来控制...

    初学者javascript脚本语言

    本资源是专为初学者设计的JavaScript学习资料,旨在帮助新手快速掌握这门强大的脚本语言。 JavaScript的基础知识包括以下几个方面: 1. **语法基础**:JavaScript语法与C++和Java有诸多相似之处,但更为灵活。变量...

    5分钟就能学会JS的9大技巧_java_技巧_javascript_

    JavaScript,简称JS,是Web开发中的重要脚本语言,它为网页添加动态功能,使得用户交互更为丰富。本文将深入探讨在5分钟内可以掌握的9大JavaScript技巧,旨在帮助初学者快速上手并提升技能。 1. 变量声明与数据类型...

    JavaScript精品上(含10个.exe文件)

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态内容。...同时,不要忘记,实践是最好的老师,理论学习的同时,多动手编写代码,解决问题,将大大加速你的成长。

    Javascript教程exe电子书.rar

    它是一种解释型、弱类型、动态类型的脚本语言,由网景公司的Brendan Eich在1995年发明,起初是为了解决网页中的交互问题。尽管名字中包含了"Java",但JavaScript与Java语言并无直接关系。 本教程“Javascript教程...

    JavaScript源码大全+v1.0.rar

    JavaScript是一种广泛应用于网页和...通过查看和分析示例代码,有助于形成良好的编程习惯,并为解决实际问题提供灵感。无论你是新手还是经验丰富的开发者,这个"JavaScript源码大全+v1.0"都将是一份宝贵的参考资料。

    JavaScript参考教程

    它最初被命名为LiveScript,后来为了与Sun Microsystems的Java语言相呼应,改名为JavaScript,但两者在技术上并无直接关联。JavaScript主要负责网页的动态交互,如表单验证、页面动画、数据处理等任务。 本资源...

    javascript

    综上所述,这些压缩包中的JavaScript实例很可能是围绕这些基础概念和进阶特性展开的,通过学习和实践,新手可以逐步掌握JavaScript编程,实现网页交互,甚至进一步探索Node.js后端开发、React前端框架或其他...

    JEE实训 计软18 -5-10 谭湘龙_javascript_

    4. **数组与对象**:JavaScript中的数组和对象是两种常用的数据结构,数组用于存储一系列值,而对象则用于存储键值对。 5. **DOM操作**:JavaScript可以操作文档对象模型(DOM),用于动态修改网页内容。例如,通过...

    javascript教程

    - 异步编程:深入理解事件循环、回调函数、Promise和async/await,解决JavaScript中的非阻塞I/O问题。 - 对象与原型:学习对象的创建、属性访问和方法调用,探讨原型链及其在继承中的作用。 - 模块系统:掌握...

    JavaScript入门教程--书籍(pdf)

    JavaScript,一种广泛应用于Web开发的轻量级编程语言,是前端开发者不可或缺的工具。本教程旨在为初学者提供一个全面的JavaScript入门指南,帮助你快速掌握这一强大的脚本语言。 一、JavaScript概述 JavaScript,...

Global site tag (gtag.js) - Google Analytics