js文件中设置对象事件无效

在外部JS中设置对象事件总是无效<scripttype="text/javascript"language="javascript"src="script/script.... 在外部JS中设置对象事件总是无效
<script type="text/javascript" language="javascript" src="script/script.js">
链接没错 从网页中能连到文件上

JS中的代码如下:
document.onLoad = function(){

document.getElementById("ts").onclick = s;
};

document.getElementById("ts").onclick = s;

function s(){
alert('1');
}

然后如果是在网页中比如id = 'ts'的对象上设置onclick事件 就有效
而利用document.getElementById("ts").onclick = s;就没有效果
而且document.onload这样的设置方法也没有效果

高手快来啊!!
好像知道了 document没有onload方法 另外onLoad是错误的写法 有window.onload方法

网上说还有document.body.onload 其实这个方法也不存在

另外想找一本能正确指导学习的书 避免以上这样的低级错误 有人推荐吗?
展开
 我来答
zhfto
推荐于2016-01-20 · TA获得超过563个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:212万
展开全部

      javascript跟HTML语言一样,都是解释型语言,一般都是在画面加载时就会进行编译,边加载边编译。执行顺序跟画面的加载顺序是一致的。

      刚开始学js的人,估计都会有跟你一样的疑惑,为什么明明代码写了,但是要么会出错,要么就不起作用? 其实答案很简单,就是因为你把正确的代码放到了错误的地方。 你可以测试一下,把你的script标签放到最后面(</body>结束标签后,或</html>结束标签后),这样你的代码肯定能够正确执行的。

      你的代码像现在这样写之所以不起作用,比如第一段:

document.onLoad = function(){ 
   document.getElementById("ts").onclick = s;
};

document对象应该是没有onload跟unload处理程序的,原则上这两个事件处理程序是属于window对象,尽管可以把这两个处理程序写在body标记里面。所以这段代码把document改为window,就可以正确注册事件了:

window.onLoad = function(){ 
   document.getElementById("ts").onclick = s;
};

或者注册给document.body对象也可以,但是js代码的出现位置就需要注意了,必须要HTML的body开始标记出现以后再执行才会有作用,所以可以像下面这样,放到body的开始和结束标记之间:

<html>
<head></head>
<body > 
<script type="text/javascript">
  document.body.onload = function(){alert("ok");}; 
</script> 
</body>
</html>

你放到body的结束标记后或放到html结束标记后都没问题,但是你要放到head标记里那就悲催了:

<html>
<head> 
<script type="text/javascript">
  document.body.onload = function(){alert("ok");}; 
</script> 
</head>
<body > </body>
</html>

在执行到声明的那段js脚本代码的时候,画面的body部分实际上还没有开始画,所以document.body所获得的是一个null值,而并不是预期中的body对象,所以就会抛出空引用的异常来:


     另外,你的这句代码直接给id为“ts的对象注册事件,也是一样的道理:

document.getElementById("ts").onclick = s;

你必须自己判断,保证在执行这段js脚本代码的时候,你画面上ID为”ts“的对象已经被画出来了,不然,通过getElementById方法取到的肯定是null值,有一种现在非常不提倡的写法,但是很方便去理解,就是直接把事件注册的代码放到对应的HTML标记后面,像下面这样:

<html>
<head> 
<script type="text/javascript">
   function s(){
      alert("ok");
   }
</script> 
</head>
<body > 
    <div id="ts">测试div</div> 
    <script type="text/javascript">
        //把事件注册直接写到对应的HTML标记后面,
        document.getElementById("ts").onclick = s;
    </script> 
</body>
</html>

这样也是可以正常执行的。之所以不提倡,是因为这样做,js代码跟HTML标记就完全混杂了,还不如直接在HTML标记里添加事件方法来的爽快呢!


   也差不多了,有点超了好像,最后说下,最好的处理方式就是把调用代码,都放到window或body的onload事件里去,这样能保证在画面加载完成后才调用你的代码,就不会再出现像现在这样会让人觉得莫名其妙的问题了。


  

 忘了一点,得补充一下,你现在代码有错,但是看不到错误提示,这个问题得解决一下:

  1.  第一种方式,是打开js的错误提示。
         这个是针对IE内核的浏览器的。 如果你的IE版本在IE8或以下的话,应该能直接看到IE的菜单栏;如果是IE9或以上的版本的话,需要先按一下"Alt"键,调出菜单栏。
        然后 在 菜单栏->工具->Internet选项,打开”Internet选项“窗口,然后,选择“高级”选项卡,在里面找到“显示每个脚本错误的通知”选项(我的是IE10,滚动条滚到最下面就看到了),把前面的勾打上就行:


    打完 勾以后 ,再有代码错误,就会直接弹出错误信息来了。这种方式基本上新手都应该这么整,有错误就会及时反映出来,至少让你知道代码出错了,不会觉得莫名其妙。

  2. 第二种方式,是通过浏览器带有的“开发人员工具”进行调试,基本上IE8或以上版本的IE浏览器、Firfox浏览器、Chorme浏览器、Opera浏览器、Safri浏览器等,都自带有开发人员工具,当然咱国内的傲游浏览器(Maxthon)也有,其他的像百度、搜狗、猎豹之类的估计没有。
           打开开发人员工具很简单,按“F12”键就行,当然你也可以自己到菜单栏的工具里去找找看。  开发人员工具里有一个”控制台“页签,你js脚本的错误都是显示到里面,还提供了对应的出错代码的链接,点连接就可以直接转到出错的代码。
           下面给你抓个IE的图看看:



    在来个Chorme浏览器的图:


    真正开发的时候,你最好学会如何利用“开发人员工具”来调试你的js脚本,这个确实比较实用。。 好了,就这么多了,不再说了!

wcpeter1988
2013-07-07 · TA获得超过264个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:137万
展开全部
  1. 需要用window.onload

  2. 你直接写的那个document.getElementById("ts"),执行的时候ts元素还没有创建

  3. 可以把错误提示打开,这些js都是有运行错误的,你对着错误看就好了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式