delegate虽然可以绑定在动态生成的组件,但是必须有个条件:父组件不能动态生成,必须是已经存在的组件。
下例中,float_menu是动态生成,其中的addrs是一个按钮,为了给这个按钮添加一个click(),应该使用delegate。但是delegate的父元素是哪一个呢?
看结构,写成$(".float_menu").delegate(".addrs","click",function(){})比较简单。但这样不会有效果,因为float_menu也是动态生成的,在生成之前,没有float_menu,所以也无法绑定。
这种情况必须向上再找,本例中可以使用.
timeline-heading,它是一直存在的。
$(".timeline-heading").delegate(".addrs","click",function(){}),如果想快速一点,可以再具体一些:
$(".timeline-heading").delegate(".float_menu .addrs","click",function(){})
-
<div class="timeline-heading">
-
<h4 class="panel-title">
-
<a class="accordion-toggle" data-toggle="collapse" href="#ap2">请完成第三节的内容<span class="pull-right"><sub><i class="fa fa-clock-o fa-fw"></i>2015.08.21 09:20</sub></span></a>
-
</h4>
-
-
-
</div>
再总结一下:delegate使用消息冒泡的特征,先在父元素上绑定“消息列表”,这个消息列表在“守株待兔”,在等待冒泡来的消息。父元素接收到消息后,就按照delegate指定的选择器来选择子元素,然后再调用其指定的消息函数。
阅读(3182) | 评论(0) | 转发(0) |