Re: [問題] javascript的問題
: <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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 6 篇):
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章