Page 34 - JavaScript修炼之道
P. 34

任务9  利用事件委托           21


                   切换条目内容


                    dom/delegation.html

                   <ul id="items">
                    <!—我们将使用JS在每个LI中插入切换器 -->
                     <li><div><p>Data 1</p><p>Data 2</p></div></li>
                     <li><div><p>Data 1</p><p>Data 2</p></div></li>
                     <li><div><p>Data 1</p><p>Data 2</p></div></li>
                    <!-- 下面可能会有更多的元素…… -->
                   </ul>
                   这是一段基于Prototype的脚本:


                    dom/delegation.js

                   $('items').observe('click', function(e) {
                     var trigger = e.findElement('a.toggler');
                     if (!trigger) return;
                    e.stop();
                     var content = trigger.up('p').next('div');
                     if (!content) return;
                    content.toggle();
                    trigger.update(content.visible() ? 'Close' : 'Open');
                    trigger.blur();
                   });

                   $('items').select('li').each(function(item) {
                    item.insert({ top: '<p><a class="toggler" href="#">Open</a></p>' });
                    item.down('div').hide();
                   });

                   使用事件代理

                   // Prototype 1.7
                   $('items').on('click', 'a.toggler', handlerFx);
                   // jQuery 1.4
                   $('a.toggler', '#items').live('click', handlerFx);
                   // YUI 3
                   Y.delegate('click', handlerFx, '#items', 'a.toggler');
                   // Ext
                   Ext.get('items').on('click', handlerFx, this, { delegate: 'a.toggler' });

               相关任务

                     任务8
   29   30   31   32   33   34   35   36   37   38   39