问题描述:
今天碰到一个很头痛的问题,项目使用的是Layui的前端UI框架,在使用Layui数据表格的时候发现,初次加载头部工具栏【删除所选班级】按钮功能都正常,但是在搜索 、修改、删除[都会执行一次表格重载获取新的数据] 之后 ,头部工具栏的按钮就失效了,怎么点击都无效!但是刷新一次页面之后又会生效。但是一执行重载之后又失效了!
- 如图所示
问题分析
- 经过一点问题一点问题的排除,最后发现是因为工具栏的按钮是后期渲染出来的,所以第一次载入页面按钮事件是生效的,但是重载之后按钮也会重新加载。这时候按钮就变成未来元素了。这时候按钮就会捕捉不到click操作。
- 此时只要换成点击事件委托就行了!无论重载多次都不会失效!
- 了解事件委托(参考文章)
解决方法
- 使用点击事件委托
// $('父元素').on('事件名','哪个子元素触发',传给回调函数的参数,事件触发时的回调函数); $('body').on('click', '#batchremove', function() { // xxxxx }
解释:
- 参数1:事件名,代表要绑定什么事件,但是记得不用加on,也就是说如果你想加点击事件,只要写’click’即可,注意是字符串!所以要打单引号或者双引号
- 参数2:只能由哪个子元素触发,例如我写 “li”,就代表只能由这个父元素里面的li触发事件,其他子元素不会触发。需要注意的是,这也是字符串,并且,参数2可以不写,那就代表仅仅只是给父元素加一个点击事件,并且所有子元素都能触发到这个事件(因为事件冒泡)
- 参数3:其实一般不会用,就是如果想事件触发时,自己给回调函数传一些值就写,这个参数也可以不写!
- 参数4:事件触发时的回调函数
总结:参数1和参数4是必须的,其他是可选的,如果你要用事件委托,请写上参数2