Justin

--见天地,见众生,见自己

导航

Javascript侦错手记

决定该收起懒惰的心了
今天一个同事问我一个奇怪的问题:一段javascript放在Function外可以正常的执行完,而放在一个function里由Button触发却总出错!
我看了一下他的代码(如下代码为仿原代码制作,原代码非为textbox,而是一个不可视的activex的object):

<input type="text" id="txt01" value="0001">
<input type="text" id="txt02" value="0002">
<input type="button" value="test" onclick="test()">
<script language="javascript">
//function test()
//
{
   alert(document.all.txt01.value);
   document.write(document.all.txt01.value);
   alert(document.all.txt02.value);
   document.write(document.all.txt02.value);
//}
</script>

按照他的方式执行了两次,果然加上上述的注释符时,运行正常;而取消上述注释时,就在alert(document.all.txt02.value)时,总提示document.all.txt02.value为空或不是对象。
初时我也百思不得其解,甚至以为是那个ActiveX的object因为安全性,在读第二次时已经过期了,但我又想,如果是这样,那不加上Function为什么又正常呢?我一再地检查代码,就是不能发现问题。直到我忽然看到了"document.write"才似乎想起了什么,把所有的document.write屏蔽后,一切正常。
原来一切都是document.write在搞鬼,如果当前页面已经load完成,它的执行会把网页第一次load的所有网页元件清理掉;而如果当前页面正在load中,则它的执行只会在当前load的代码后面增加内容。这就是上面的问题造成的原因。

posted on 2005-05-26 20:52  HappyMan  阅读(761)  评论(0编辑  收藏  举报