RSS

《jQuery in Action》 in Action - Chapter 4

Labels:

Events are where it happens!

事件处理是Javascript编程的重要一环,在jQuery之前有几种处理事件的模型:

  1. DOM Level 0 Event Model - 几乎在所有浏览器里通用,但是类似onclick的写法不符合Unobtrusive JavaScript ,同时每个元素同一类型的事件只能注册一个处理方法的限制也很致命
  2. DOM Level 2 Event Model - 解决了Unobtrusive JavaScript的问题,但是令人头痛的是每天被人诅咒的IE并不支持。(书中还讲了一遍DOM Level 2 Event Model中的capture phase 和 bubble phase值得复习一下)
jQuery的事件模型为大家解决一切烦恼: Unobtrusive JavaScript当然是原则,同时隔离了不同浏览器间的差异,使用统一的模型接口:
  1. bind(eventType,data,listener)
  2. 例: $('#vstar') .bind('click',function(event) { say('Whee once!'); })

当然大家可能一辈子也不会用到上面的方法几次,因为jQuery有更方便的快捷方法

  1. eventTypeName(listener)
  2. 例: $('#vstar') .click(function(event) { say('Whee once!'); })

另外一个bind堂兄也很有趣,让监听元素的listener只运行一次,之后就unbind掉:

  1. one(eventType,data,listener)

解除事件监听自然就是用unbind方法,第一种是解除指定的处理方法,第二种就是所有的该事件类型的方法都解除监听

  1. unbind(eventType,listener)
  2. unbind(event)

再提两个bind函数的表亲:

  1. toggle(listenerOdd,listenerEven) //监听对象的click事件,然后在listenerOdd和listenerEven之间轮流执行处理,有时候会很顺手
  2. hover(overListener,outListener) //监听对象的mouserover和mouseout事件,特殊之处在于对于当鼠标移动到监听元素内部的子元素上时,监听元素的mouseout事件不会执行,这是大多数情况下我们需要的结果,但是大多数浏览器上都正好相反,好在jQuery比较贴心

另外在这本书出版之后,jQuery在1.3版本中加入的新函数,要论起辈份来就是bind的大哥了,因为他可以把事件绑定到目前和将来所有符合某一匹配的元素:

  1. live(type, fn) //比如用live绑定了页面所有的a对象的click事件,这之后通过脚本动态插入到dom中的a对象也同样的绑定了click事件!第一次看到这个方法真的让我兴奋很久呢
  2. die(type, fn) //类似于unbind方法

jQuery的事件名称支持命名空间也是挺有趣的,看个例子就明白了:

$('#thing1').bind('click.editMode',someListener);

jQuery支持通过脚本来击发元素的各种事件,以达到让监听了这个事件的处理方法运行的目的,只是这个事件的激发不会真的模拟浏览器的dom level 2 event model中的capture phase 和 bubble phase: trigger(eventType)

最后说说listener函数中的event参数,jQuery在传递过来时做了尽可能的浏览器一致性工作,基本上写jQuery的脚本就不用担心不同的浏览器了。具体的event参数列表

p.s. jQuery in Action这本书是去年出的,俺看完了之后就懒了,只写了前三章的简介,最近无事,就把事情做完吧,但是jQuery这一年也发展了不少,比如上面提到的live函数等等,所以有翻译到过时的部分我又没发现的,就要见谅了。另外推荐jQuery的API网站,很好用 链接: 《jQuery in Action》 in action系列

杭州 杭州

Labels: , ,
州,多云转阵雨...这是公元2009年7月22日的天气预报。突然抽筋一定要看日全食的我在两天前做出了具有决胜意义的战略:放弃上海转战杭州。 公元2009年7月21日晚 对杭州的第一印象就一个字"" 公元2009年7月22日7时 起床后失败的发现天气阴的一塌糊涂 公元2009年7月22日8时 买完回京的火车票后居然又看到了太阳从云层中钻了出来,峰回路转了! 公元2009年7月22日9时30分 找到还在浙大蹲点儿的高中同学一,在某实验楼楼顶见证了日全食。终于体会到了日冕和贝利珠的魅力,相比之下多年前看到的日偏食就索然无味了,只有太阳的最后一丝光辉被完全遮住后的刹那才会让人感觉得到自然力的伟大。食甚的时候我呆呆的仰望了天空5分钟,想用手机发条微博客,但是深怕错过任何的精彩,所以只是眼睛没眨一下的看了5分钟。 公元2009年7月22日9时35分 又一次看到贝利珠的光芒后,套用大家都在说的话"行,我这500年没有白活"。 公元2009年7月22日10时 在一同学的导游下开始环西子湖自行车游览赛: 曲苑风荷/平湖秋月/断桥残雪/柳浪闻莺/雷峰夕照/花港观鱼/三潭映月/苏堤春晓 十景逛到了八景,在美丽的风景下做运动或更准确的说是在运动中欣赏美丽的风景还是很惬意的。 公元2009年7月22日13时 loc:外婆家 东坡肉+龙井茶香鸡 就把一上午的运动热量补回来了... 公元2009年7月22日21时 晚上闲来无事,就跑到贝塔咖啡去偷看偶像Fenng,经过2个小时的潜水,终于见到了玩弄Kindle的Fenng。对了,顺便说一句,贝塔咖啡在twitter上推荐的冰沙超级难吃,大家不要上当哦:)卡普奇诺还OK,wifi的密码是"cafebeta"哦.

系统演示

Labels:
Flickr Post:

系统演示
Originally uploaded by robaggio
on 15th July, 2009

第一次做和pos机相关的程序,觉得挺有趣的,就照下来了(要是照片中那张测试卡可以真的可以刷就牛了,里面有好几亿人民币呢)