解决给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 相关文章推荐
JS中style属性
Oct 11 Javascript
javascript 学习之旅 (1)
Feb 05 Javascript
dojo学习第一天 Tab选项卡 实现
Aug 28 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
JS+CSS实现精美的二级导航效果代码
Sep 17 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
Jan 28 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
vue上传图片组件编写代码
Jul 26 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
Dec 06 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
javascript 继承实现方法
2009/08/26 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
EsLint入门学习教程
2017/02/17 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python中的rfind()方法使用详解
2015/05/19 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
Django 自定义分页器的实现代码
2019/11/24 Python
python常用运维脚本实例小结
2020/02/14 Python
django配置app中的静态文件步骤
2020/03/27 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
木工主管岗位职责
2013/12/08 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
2014年服务员工作总结
2014/11/18 职场文书
生死抉择观后感
2015/06/09 职场文书
家属联谊会致辞
2015/07/31 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
python如何利用traceback获取详细的异常信息
2021/06/05 Python
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB