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

之前一直遇到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执行顺序

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

(0)

相关推荐

  • 动态生成的DOM不会触发onclick事件的原因及解决方法

    最近朋友在做一个项目的时候,遇到动态加载微博内容,然后点击"展开评论"后获取该微博的所有评论.这里使用了动态加载的<span mid='123456789′ class='get_comment'>点击加载评论</span>. 然后再写 $(".get_comment).click(function(){ //响应事件逻辑 }) 发现click事件并不会触发,使用控制台侦听也木有错误.百思不得其解时, 因为我在以前做搜狐家居商城的运费管理时,也曾遇到,

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

    之前一直遇到js插件生成的元素,click事件无效的问题,重新绑定也不行,终于找到解决方法,在此记下来. 同时加深对js事件处理机制的理解. 1. 事件被解绑 这种情况下一般不会导致click失效,但以下情况,click事件就失效了: $(function(){ $('.btn').unbind() }) $('.btn').click(function(){ //... }) 所以,click事件要有个好习惯: $(function(){ $('.btn').click(function(){

  • vue获取DOM元素并设置属性的两种实现方法

    这里我想到了2个方法: 方法一: 直接给相应的元素加id,然后再document.getElementById("id");获取,然后设置相应属性或样式 方法二: 使用ref,给相应的元素加ref="name" 然后再this.$refs.name获取到该元素 注意:在获取相应元素之前,必须在mount钩子进行挂载,否则获取到的值为空, 如果是给子组件加id并修改自定义属性,则直接会加载改子组件对应的外层div上,并不会改变该子组件原本的自定义属性的值 如果给子组件

  • Js操作DOM元素及获取浏览器高宽的简单方法

    在JavaScript中,经常会来获取Document文档元素,是 HTML 文档对象模型的英文缩写,Document Object Model for HTML,是基于浏览器编程,HTML DOM 定义了用于 HTML 的一系列标准的对象,以及访问和处理 HTML 文档的标准方法. 通过 DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性.可以对其中的内容进行修改和删除,同时也可以创建新的元素.HTML DOM 独立于平台和编程语言.它可被任何编程语言诸如 Java.JavaS

  • 解决angularJS中input标签的ng-change事件无效问题

    出现这个问题是因为input的type是file,这时如果用ng-change="()"是无效的. 解决方法:用onchange事件. <input onchange="angular.element(this).scope().change()" type="file"> $scope.change= function () { } 以上这篇解决angularJS中input标签的ng-change事件无效问题就是小编分享给大家的全

  • 元素绑定click点击事件方法

    最简单的莫过于使用click方法: <input id="btn" type="button" value="BUTTON" onclick="alert(1)"/> <script> var btn = document.getElementById('btn'); btn.click(); </script> 所有浏览器都弹出了1.但是如果把input换成div呢? <div id

  • JQuery为页面Dom元素绑定事件及解除绑定方法

    1.绑定事件 复制代码 代码如下: $('#id').bind("click",function(){ ... }) 可一次性绑定多个事件 复制代码 代码如下: $('#id').bind("click mouseover mouseout",function(){ ... }) 2.解除绑定 复制代码 代码如下: $('#id').unbind("click") 3.绑定一次 复制代码 代码如下: $('#id').one("clic

  • jQuery使用bind动态绑定事件无效的处理方法

    最近在进行页面开发,在做页面特效的时候,需要给一个动态加载的按钮赋予一个事件 于是不假思索的 用$(obj).bind();  来绑定事件 . 但是这样存在一个问题: bind确实能绑定事件,但是那是相对于固定的html标签来说 当页面内容属于动态加载的时候,bind事件就存在一个bug,  只能bind一次,当你第二次触发事件的时候就没用了 例如: 我给<a>标签赋予一个click , <a>标签包括内容都是从后台数据读取然后动态加载的.当我使用bind来绑定click事件,这时

  • JQuery给元素绑定click事件多次执行的解决方法

    原绑定方法: 复制代码 代码如下: $("#sdfsd").on("mouseout",function(e){ ***** }); 这种方法只会在原click方法中继续添加新方法: 解决办法更改绑定方法为: 复制代码 代码如下: $("#sdfsd").unbind("click").click(function(e){ ***** }); 在绑定新click方法前对元素所绑定的click方法解绑

  • JQuery 给元素绑定click事件多次执行的解决方法

    原绑定方法: $("#sdfsd").on("click",function(e){ ***** }); 这种方法只会在原click方法中继续添加新方法: 解决办法更改绑定方法为: $("#sdfsd").unbind("click").click(function(e){ ***** }); 在绑定新click方法前对元素所绑定的click方法解绑

  • jQuery on()方法绑定动态元素的点击事件无响应的解决办法

    $('#check_all').on('click' , function(){ alert(1); }); $("#yujinlist").append(html); count++; } 以上代码执行时,点击#check_all时,alert一直没反应,后在网上查资料时,才知道on前面的元素也必须在页面加载的时候就存在于dom里面, 那原话是这样的: 支持给动态元素和属性绑定事件的是live和on,其中live在JQUERY 1.7之后就不推荐使用了.现在主要用on,使用on的时候

随机推荐