如何使用委托事件?
我正在使用一个事件来替换某些层中的“src”属性(
):
$('.playOnAP').on('click',function() { $('#mp3-list ul li',this).each( function( index, element ) { $('.total-title').eq(index).attr('src', $(this).text() ); });
并且它第一次工作,但是在Ajax请求之后,当$('.playOnAP')
元素被替换时。 我猜我应该使用委托事件 ,但不要说清楚。
我试过下一个:
$('.playOnAP').on('click','#mp3-list ul li',function() { $('.playOnAP #mp3-list ul li').on('click',function() { $('.playOnAP #mp3-list ul li').on('click','#mp3-list ul li',function() {
但不起作用。
试试这个:
$(document).on('click', '.playOnAP',function() {
使用事件委派时,必须将事件绑定到最初在DOM中的元素。 如果动态替换了某些内容,则无法绑定到该内容。
正如Anup深刻地提到的,将click事件绑定到document
并不是绝对必要的 – 任何父元素都会这样做,只要它最初在DOM中。
例如,如果.playOnAP
是要替换的最顶层容器元素:
//some stuff here
你可以使用:
$('#someDiv').on('click', '.playOnAP', function() { //do your stuff });
但是,默认情况下,你几乎总是使用$(document).on()
(即使只是作为一个快速检查,以确保一切正常,然后缩小到最合适的元素)。
如果要替换.playOnAp,则需要将委托放在.playOnAp的父级上。 事件处理程序仅附加到添加事件处理程序时存在的DOM元素。