Re: [問題] javascript的問題

看板Web_Design作者 (嵐)時間18年前 (2006/07/17 18:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
: <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)
文章代碼(AID): #14ksE33r (Web_Design)
討論串 (同標題文章)
文章代碼(AID): #14ksE33r (Web_Design)