使用jQuery,如何触发动态生成的元素的事件?

淋着
  • 295

问题描述

现在动态生成的元素为a便签,使用$(this).parent().prev('span').last().children('a').click()
无法触发a的行为

回复
阅读 2.4k
5 个回答

不是事件触发的问题,是事件监听问题,对于新生成的元素,只能使用事件委托形式监听。

事件委托示例。

<div id="parent"></div>

$('#parent').on('click','a',function() {
    // 处理点击
});

事件委托、trigger

`

initEvent() {
    <div  class\="parent"\>
    ...
    <a  data\-index\="n"  role\="sub"\></a\>
    ...
    </div\>

    const  parent  \=  $('#parent');

    // 不关心里面有几个元素
    parent.on('click', (e) \=> {
    e.stop***();// 不要冒泡,
    if (e.***  \===  'sub') { // 判断选中的元素
        somefn(e.dataIndex);
    }
   });
}

`

对未来的元素绑定事件不能用bind
`
1、可以用live代替,但是要注意jquery的版本,根据官方文档,从1.7开始就不推荐live和delegate了,1.9里就去掉live了。 

2、推荐用on代替(注:1.7及以上的版本才支持)。用法:on(events,[selector],[data],fn)。

3、 当只想为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数时,用.one()代替on就可以了,注意不是在所有的[selector]上都可以执行一次,而是在这些[select]上总共也就执行一次,对未来的元素也有效。
`

宣传栏