作者elan (岚)
看板Web_Design
标题Re: [问题] javascript的问题
时间Mon Jul 17 18:43:21 2006
: <html>
: ...
: <body>
: <script>
: showPic(1);
: function showPic(num){
: if(num < 5){
: next=num+1;
: }else{
: next=1;
: }
: document.writeln("<a href=# onclick=showPic(next);>
: <img src="+num+".jpg width=500></a>");
: }
: </script>
: </body>
: </html>
: 当我在第一张照片按下去,可以秀出第二张照片,
: 可是我在第二张照片按下去,却不能秀出第三张照片,
: 出现在错误讯息:'next'未被定义
: 请大家指正一下,谢谢
:: ckw:把next搬到if外面
^^^^^^^^^^^^^^
不 并不是这个原因
把next搬到if区块外面并不会改变什麽
JavaScript的if, while ... 等等区块并不会产生另一个变数的namespace
他在showPic这个function里面直接未经宣告就引用了next这个变数 (这在某些browser
会出现warning 并不会错误)
JavaScript解译器会直接把这个变数放在window物件的scope下面
而且相当於写了 window.next = num+1, 就是他宣告了一个window物件的member为'next'
因此他下面利用document.writeln插入的 <a href="#" onclick=showPic(next) ...>
里面onlick呼叫showPic的参数next会参照到window.next
所以没问题
那问题出在那里呢?
: 当我在第一张照片按下去,可以秀出第二张照片,
: 可是我在第二张照片按下去,却不能秀出第三张照片,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
问题就出在这里
第一张照片的html code是在他网页loading的中途利用document.writeln插进去的
等到整个网页ready了 他去按这个照片 onclick里面的next是window.next
JS Engine可以参照到
可是 之後他的showPic又去做了document.writeln
(请注意 这时document已经loaded完了 他又利用onclick事件去呼叫writeln)
如此会覆写掉原来document (相当於load一份新的document)
那原来window下面的变数stack会被清空 那当然这时window下面就没有next这个member
所以会出现 'next未定义'的错误
基本上这些程式的设计本身就有问题 我想还是重头写一次比较好
而且利用隐晦的变数空间参照也不是什麽好习惯
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.16.95
※ 编辑: elan 来自: 220.131.16.95 (07/17 22:02)