美文网首页
js/jq 动态添加的元素不能触发绑定事件解决方案

js/jq 动态添加的元素不能触发绑定事件解决方案

作者: peterz博客 | 来源:发表于2019-03-29 21:57 被阅读0次

场景案例,当登录账户后,ajax 无刷新显示用户名头像,并绑定头像移入移出事件

请先看看你们的版本并对号入座:

   jquery1.6版本以下都不支持on委托事件
   jquery1.3 至 jQuery1.8版都支持live委托事件
   jquery1.9 以后的版本不支持live委托事件,但是on事件可以替代live

一、jquery1.3版本以下的(不包括jquery1.3),是时候更新你的jquery版本了。
因为 无解无解无解无解无解无解

二、如果jquery版本是在1.3-1.8之间的话,js/jq动态添加的元素触发绑定事件的解决方法(不建议用on事件,因为1.6版本以下不支持on事件,会报错)

三、推荐使用on

click例子
$('element').live('click',function(){})
element可以是动态生成的元素,可以是它的类或者id

如果jquery版本是在1.9或者更高的话,live委托事件是被移除的,通过on来实现。js/jq动态添加的元素触发绑定事件的解决方法

注意注意:如果页面同时存在低版本的jq(1.3-1.8)和高版本jq(jquery1.9以上)的话,live委托事件会被高版本移除,最后导致虽然有jquery版本是在1.3-1.8之间,使用了live事件,页面会报错。

划重点

click例子
$('父元素').on('click', '子元素', function(){})

此时动态加载出来的元素一定要在$(‘父元素’)里面,否则绑定事件失效。换句话说,本应该绑定A元素,但是A元素是动态生成的,所以jq应该获取A元素的父元素来监听A元素是否发生click事件。

举个例子

这是我登录前的html

<div id="qqlogin">
    <div class="login_reg">
       <a href="javascript:;" class="login_btn" lay-submit="" lay-filter="login">登录 </a> / 
      <a href="javascript:;" class="reg_btn" lay-submit="" lay-filter="reg"> 注册</a>
    </div>
</div>

登录成功后 ajax 将qqlogin 里的内容替换为登录用户信息,同时绑定鼠标移入移出事件在user_info 身上,但问题就出在 user_info 是动态添加的元素,必须要借助它的父元素才能绑定到事件。不然不刷新页面是无法绑定移入移出的

 var str ="<div class='user_info'><div><img src='"+res.data.head_url+"' ><div>"+res.data.nickname+
"</div></div><ul><a href=''>完善信息</a><br><a href='javascript:;' id='login_out' 
data-url='"+$('#login_out').attr('data-url')+"'>登出</a></ul></div>";
 $('#qqlogin').html(str);

jq绑定

  $(function(){
     $("#qqlogin").on("mouseover mouseout",'.user_info',function(event){
          if(event.type == "mouseover"){
            $("#qqlogin ul").show();
          }else if(event.type == "mouseout"){
             $("#qqlogin ul").hide();
          }
    });
  });

之前总是用 $("#user_info").on("mouseover mouseout",function(event){});
一定要刷新页面才能起作用,坑死我了!!!

最后晒下成果图


image.png image.png

相关文章

  • js/jq 动态添加的元素不能触发绑定事件解决方案

    场景案例,当登录账户后,ajax 无刷新显示用户名头像,并绑定头像移入移出事件 请先看看你们的版本并对号入座: 一...

  • jQuery 相关

    在jQ元素上调用.click()并不会触发原生js的点击事件,而是已绑定的jQ点击事件 宽高属性获取innerWi...

  • js为动态生成/添加的元素绑定事件

    有一段时间没有写js代码了,今天就说说js为动态生成/添加的元素绑定事件。 原理: 定位到需要绑定的元素(重点)-...

  • 拾回忆

    先整理一下写在本子里的东西。。。 jq:on绑定事件 动态创建的元素绑定 需要委托于一直存在的父辈元素jq:会遇到...

  • jQuery给动态添加的元素绑定事件

    在做练习的时候发现,动态添加的元素,触发不了原先绑定的事件,从网上找了几个解决方法 1.$(parentEle)....

  • js 为动态添加的元素绑定事件

    想必大家都有遇到过,DOM动态添加的元素,你给它绑定的事件是不起作用的。目前有两种办法,为动态添加的元素绑定事件 ...

  • Jquery中的bind,live,delegate,on的区别

    bind:1.兼容性较好;2.绑定事件到所有选中的元素上;3.不能绑定事件到动态添加的元素上;4.效率较低,尤其是...

  • Vue2.0 阻止事件冒泡

    问题 描述:点击 save-btn 元素会同时触发 wrap 绑定的 click 事件。 解决方案:阻止事件冒泡 ...

  • 获取dom元素

    绑定事件 =》触发事件调用js函数 =》操作dom元素。 参考 https://juejin.im/post/5e...

  • target、currentTarget、srcElement

    简单总结如下: target触发事件的元素 currentTarget绑定事件的元素 srcElement触发事件...

网友评论

      本文标题:js/jq 动态添加的元素不能触发绑定事件解决方案

      本文链接:https://www.haomeiwen.com/subject/bfxdbqtx.html