[問題] javascript全域變數的問題

看板Web_Design作者 (o(.```.)o)時間15年前 (2010/06/08 10:32), 編輯推噓6(6035)
留言41則, 6人參與, 最新討論串1/2 (看更多)
請問一下 假設我有一個表單欄位 會讓好幾個 function 使用到 所以我想把他宣告為全域變數 請問我該怎麼做呢? (直接放在外面會有錯誤訊息) 例如: var fy=document.getElementById('Y'); function a1(){ fy.value=1; } function a2(){ fy.style.left=0; } function a3(){ fy.style.top=0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.240.131.70

06/08 11:32, , 1F
var window.fy
06/08 11:32, 1F

06/08 11:37, , 2F
更正: 不需要var。window.fy = xxxxx就好
06/08 11:37, 2F

06/08 12:15, , 4F
樓上 沒辦法呢 不管是寫在js檔裡或是直接寫在網頁上都
06/08 12:15, 4F

06/08 12:16, , 5F
還是不行 對了 忘記說我的瀏覽器是IE6
06/08 12:16, 5F

06/08 12:27, , 6F
我也不行,研究中。你的錯誤結果是fy未定義嗎,用fx也是
06/08 12:27, 6F

06/08 12:27, , 7F
一樣的結果。應該是call a1 a2 a3時,fy還沒產生。
06/08 12:27, 7F

06/08 12:33, , 8F
問題發生在把fy宣告在$(document).ready()裡面(如果你用
06/08 12:33, 8F

06/08 12:35, , 9F
jquery),之後又馬上call a1。
06/08 12:35, 9F

06/08 12:35, , 10F
不用ready()並把js code搬到</body>前可以解決。
06/08 12:35, 10F

06/08 12:57, , 11F
恩 他會顯示未定義
06/08 12:57, 11F

06/08 12:58, , 12F
原本是寫在區域變數內 但是每次都要宣告一次就很累贅
06/08 12:58, 12F

06/08 13:00, , 13F
我不是用 jquery 呢@@
06/08 13:00, 13F

06/08 13:04, , 14F
抱歉 頭腦有點混亂 沒注意到用framework就不會這樣寫了
06/08 13:04, 14F

06/08 13:04, , 15F
如果放外面也未定義 可能是var fy時 那個input還沒讀到
06/08 13:04, 15F

06/08 13:04, , 16F
把js放</body>前也不行嗎?
06/08 13:04, 16F

06/08 13:37, , 17F
應該是把 fy=xxxx 放到 <body> 後
06/08 13:37, 17F

06/08 14:16, , 18F
一開始先var fy ; ready之後 在 fy=byid 或是搬到 </body>
06/08 14:16, 18F

06/08 14:17, , 19F
之前,你用jquery會簡單的多
06/08 14:17, 19F


06/08 14:18, , 21F
噁 一定要用jquery嗎? 我只是想簡化我的程式碼而已QQ
06/08 14:18, 21F

06/08 14:19, , 22F
目前寫在<body>之間 還是沒辦法做出來
06/08 14:19, 22F

06/08 14:19, , 23F
寫個 load的 function 就好
06/08 14:19, 23F

06/08 14:20, , 24F
你放外面先不要給值,網頁還沒讀取完他抓不到
06/08 14:20, 24F

06/08 14:21, , 25F
所以放最後面,或是 LOAD 之後再跑就行了
06/08 14:21, 25F

06/08 14:35, , 26F
window.onload=function(){var fy=xxxx} 可以這樣寫
06/08 14:35, 26F

06/08 14:35, , 27F
如果不在乎必須等圖片, css全部讀取完才會執行
06/08 14:35, 27F

06/08 14:37, , 28F
呃 是放</body>的前面 不是<body>
06/08 14:37, 28F

06/08 14:52, , 29F
06/08 14:52, 29F

06/08 14:52, , 30F
你之前的全域變數寫法沒錯 但用window.fy不能加var
06/08 14:52, 30F

06/08 14:57, , 31F
jsbin很像不支援IE6 請用別的開
06/08 14:57, 31F

06/08 19:57, , 32F
放棄了 囧
06/08 19:57, 32F

06/08 20:09, , 33F

06/08 20:10, , 34F
重貼之前jsbin的. 這個也不能跑?
06/08 20:10, 34F

06/08 20:29, , 35F
咦....同樣的寫法為何你的可以?
06/08 20:29, 35F

06/08 20:35, , 36F
這..太神奇了吧..我下午是在搞什麼...
06/08 20:35, 36F

06/08 20:35, , 37F
感謝囉^^ 終於解決了....
06/08 20:35, 37F
不好意思 再問一下 我目前用這個方法慢慢縮短我的程式碼 不過在程式一開始就以 window.fy=xxxx 設定全域變數的寫法 對於整個程式的運作上會有幫助嗎?? 或是反而會造成負擔? ※ 編輯: chocho1981 來自: 210.240.131.71 (06/08 21:20)

06/09 11:56, , 38F
適當的使用是很ok的~尤其是需要重複call的
06/09 11:56, 38F

06/09 11:57, , 39F
但是濫用反而會造成一些類似memory leak的困擾
06/09 11:57, 39F

06/09 13:59, , 40F
我的程式碼就是一直重複call...
06/09 13:59, 40F

06/09 14:00, , 41F
原本想說寫完再改 但現在越寫越多 不想改了...
06/09 14:00, 41F
文章代碼(AID): #1C3QkmuU (Web_Design)
文章代碼(AID): #1C3QkmuU (Web_Design)