Page 31 - JavaScript修炼之道
P. 31

18       第二部分  DOM、事件及定时器


             任务 8  监听及停止监听事件


                 事件是一个庞大的主题,短短两页的篇幅连基本概念都无法覆盖。因此,这里只提供一个非
             常简短的快速参考(位于右页)。你应该(我几乎敢断言,你必须)花时间,找到你使用的库的
             文档或指南,将其中与事件相关的内容仔细阅读几遍。不要觉得这是浪费时间,掌握事件的技巧
             会为你带来巨大的回报。

                 需要特别注意的是,多数库为监听特殊事件提供了简写方法,因此,你应该调用的是
             onclick(handlerFx) 而不是 connect('click', handlerFx) 。另一个有用的技巧是,多数库
             允许用较少的参数来停止或关闭一系列事件(例如,关闭所有的单击事件或停止监听某个元素上
             的所有事件)。

                 值得注意的特例:Dojo使用一种单独的机制来连接任意形式的事件(如常规的DOM事件、
             自定义事件、所谓的全局事件、发布订阅事件以及单纯的方法调用等)和任意形式的函数(包

             括真实的事件处理器、普通的函数和方法)。这是个非常好的特性。而Ext JS可以通过设置on()
             的第四个参数,来配置各种各样的事件。

                 所有的库都提供了一种简单的方式,以便你在文档级别来监听事件(利用事件冒泡)。举例

             来说,你可以使用Prototype中的document.observe,或者利用dojo.doc或Ext.getDoc()这些
             包装器。不过,你不应该过度依赖事件捕获(自上而下的事件传播/检查)相关的参数和选项,
             因为在IE8之前的IE中,它们没有得到很好的支持。
                 所有的库均为事件处理器提供了一个加强版的Event对象,其中既包含了W3C要求的属性和

             方法,也包含了一些辅助性的属性和方法。

                 默认情况下,事件处理函数在作为函数引用传递时会丢失它们潜在的绑定关系,而在全局上
             下文中执行 。为了解决这个问题,一些库允许你传递一个可选的参数作为作用域对象。
                       ①
                 最后,绝大多数库支持自定义事件和一些惯用事件。就我个人而言,DOM提供的一些备用
             事件不可或缺,比如mouseenter和mouseleave等事件。








             ——————————
                ①  作者的这篇文章包含了很多JavaScript绑定的要点和技巧,网址在http://www.alistapart.com/articles/getoutbinding-
                  situations/。
   26   27   28   29   30   31   32   33   34   35   36