今天遇到个问题,在table里面动态更新数据,然后每一行会绑定相应的点击事件
我原本是想用 可作用于未来元素的on方法,但是实际上还是没有起作用,代码如下:
点击(此处)折叠或打开
- $(".form-table tbody tr").on("click",function () {})
解决方法:
点击(此处)折叠或打开
- $("body").on("click",".form-table tbody tr",function () {})
点击(此处)折叠或打开
- on(events,[selector],[data],fn)
events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" 。
selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择器为null或省略,当它到达选定的元素,事件总是触发。
data:当一个事件被触发时要传递event.data给事件处理函数。
fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。
有人提出了事件委托,那么对于这种动态添加的事件,我建议这么写:
点击(此处)折叠或打开
- function $domOfSth(text){
- return $("").on('click','.tags_closebtn',function(){
- console.log('xxxx');
- });
- }
-
- $('#xxx').append($domOfSth('xxx'))
在$domOfSth函数里面,这个dom可以绑定事件的写法相当灵活
对于事件一目了然,可维护性好
事件绝对牢牢绑定在插入dom上,不会因为js读到$(".tags_closebtn")这一句的时候,页面找不到这个对象的尴尬。。。
这个尴尬刚好是你点击事件未绑定到插入的dom上的原因。因为,js读到$(".tags_closebtn").on('click')的时候,浏览器还没更新html代码呢,然后jq就跑去找,发现tm页面上根本没有这个类,是假的,是化学的成分。。。