解决给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全选checkBox功能实现代码(取消全选功能)
Dec 10 Javascript
js改变embed标签src值的方法
Apr 10 Javascript
JS中字符串trim()使用示例
May 26 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
vue实现表格数据的增删改查
Jul 10 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
JS定义函数的几种常用方法小结
May 23 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
php 表单数据的获取代码
2009/03/10 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
详解Python爬虫的基本写法
2016/01/08 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers