作者HuangJC (吹笛牧童)
看板Ajax
標題[ js ] prototype.js/observe
時間Thu Jul 23 13:11:34 2009
最近喜歡用 observe 把一些函式綁在 event 上,但感覺還是有小小的差別
1.優點:可以綁不只一個
考慮數個檔交互 include 的現象
a.js include b.js
兩檔內各有一個 onload
這種寫法
onload = function(){....}
結果是只有一個 onload 能動
因為 onload 是一個變數,就好像
a=5;
a=6;
最後 a 會被洗到 6
但如果是 observe,就都會動
Event.observe(this, 'load', function(){....})
檢查變數,找不到變數的值被改變,可以說這或許是一種模擬?
比如說,從最外層的 parent 裏準備一個陣列,放所有 observe 設定
當事件 onload 發生時,用 for loop 掃一遍,找得到的全執行
但如果這樣做速度不是會很慢嗎?
2.缺點:有一點不相容
無法確定是不是我不會用,但我碰上了,正在迴避中..
$('id').onkeypress = function(event){return false};
其實我是要做按鍵的過濾,比如限定只輸入數字之類
所以我攔截 onkeypress,必要時 return false;
上面那行可以使我的 input 一個字都打不出來
但如果用 observe 做,就不成了
$('id').observe('keypress', function(event){alert('la');return false});
每按一個鍵,內部的函式有被執行(alert 有動作)
但是 return false 根本沒用,字還是一直被打出來
因為我要對一整個輸入陣列做設定
本來要用 [].each('observe', 'keypress', function(){}) 去設的
這下就不能用了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.65.16
1F:推 lausai:呼叫event object的preventDefault method 或者把 07/23 17:41
2F:→ lausai:returnValue設為false @@ 07/23 17:42
3F:→ HuangJC:謝謝,這招有用,但有時 preventDefault 函式不存在.. 07/23 19:21
4F:→ HuangJC:js 真恐怖,相容性問題一堆呀.. 07/23 19:22
5F:推 lausai:記得preventDefault是標準 但IE沒有實作 在IE下必須要用非 07/23 19:45
6F:→ lausai:標準的returnValue=false來代替 @@ 07/23 19:48
7F:→ HuangJC:也不是,我在 IE 下有用 preventDefault;但還是我上面兩種 07/23 20:17
8F:→ HuangJC:用法的差別,onload=function or observe,preventDefault未 07/23 20:17
9F:→ HuangJC:必存在;反正判斷存在就呼叫,不存在就用傳回值.. 07/23 20:17