解决给dom元素绑定click等事件无效问题的方法


Posted in Javascript onFebruary 17, 2017

之前一直遇到js插件生成的元素,click事件无效的问题,重新绑定也不行,终于找到解决方法,在此记下来。

同时加深对js事件处理机制的理解。

1. 事件被解绑

这种情况下一般不会导致click失效,但以下情况,click事件就失效了:

$(function(){
 $('.btn').unbind()
})
$('.btn').click(function(){
 //...
 })

所以,click事件要有个好习惯:

$(function(){
 $('.btn').click(function(){
 //...
 })
})

2. js插件异步/动态加载dom

一般含有等待时间/开始运行时间:WaitTime

此时直接绑定/监听无效:

$(function(){
 $('.container .btn').on('click',function(){
 //...
 })
})

解决方法1:

$(function(){
 setTimeout(function{ 
 $('.container .btn').click(function(){
  //...
  })
 //.btn 加载后事件 
 },WaitTime) 
})

解决方法2(事件委托,即委托给父元素):

$(function(){
 $('.container').on('click','.btn',function(){
 //...
 })
})

3. ajax 异步加载的dom

  • 可以在done()函数体中加click事件
  • 同2中的事件委托方法。

4. 点击链接无反应

以下代码会导致a标签有href也无法跳转

$(function(){
 $('a').on('click',function(e){
 e.preventDefault()
 //...
 })
})

解决方法:

$(function(){
 $('a').on('click',function(e){
 e.preventDefault()
 //...
 })
 $('a').unbind()
})

小结

1.事件绑定,事件监听,事件委托 相关链接

2.事件捕获与冒泡 相关链接

target.addEventListener(type, listener[, options]);
 target.addEventListener(type, listener[, useCapture]);

事件捕获

父元素先发生,子元素后

事件冒泡

子元素先发生,父元素后

3.javascript执行顺序

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
用jQuery实现检测浏览器及版本的脚本代码
Jan 22 Javascript
基于jquery的超简单上下翻
Apr 20 Javascript
node.js开机自启动脚本文件
Dec 24 Javascript
js实现同一个页面多个渐变效果的方法
Apr 10 Javascript
Bootstrap表单使用方法详解
Feb 17 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
详解微信小程序中的页面代码中的模板的封装
Oct 12 Javascript
微信小程序使用Promise简化回调
Feb 06 Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
JavaScript实现星级评价效果
May 17 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
Vue.js原理分析之observer模块详解
Feb 17 #Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 #Javascript
Bootstrap表单使用方法详解
Feb 17 #Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 #Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 #Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 #Javascript
数组Array的排序sort方法
Feb 17 #Javascript
You might like
php遍历类中包含的所有元素的方法
2015/05/12 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
python 的topk算法实例
2020/04/02 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
Python的信号库Blinker用法详解
2020/12/31 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
酒店经理职责
2014/01/30 职场文书
搞笑创意广告语
2014/03/17 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
产品质量保证书范本
2015/02/27 职场文书