作者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