问题描述
现在动态生成的元素为a便签,使用$(this).parent().prev('span').last().children('a').click()
无法触发a的行为
现在动态生成的元素为a便签,使用$(this).parent().prev('span').last().children('a').click()
无法触发a的行为
`
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]上总共也就执行一次,对未来的元素也有效。
`
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
不是
事件触发
的问题,是事件监听问题
,对于新生成的元素,只能使用事件委托
形式监听。事件委托示例。