为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript事件委托和一个遇到的BUG!?

标签:
JavaScript

事件委托

利用事件冒泡的原理,将需要绑定的事件交给父元素来监听,实现如下:

html

// 有100个li节点<ul class="list-wrapper">
  <li class="list-item"></li> * 100</ul>

javascript

var ul = document.querySelector('.list-wrapper');
ul. = function (e) {  if (e.target.className = 'list-item') {    // do somthing
  }
}

jquery

$('.list-wrapper').on('click', '.list-item', function () {  // do somthing})

事件委托的好处

  • 性能好,你给100个li节点绑定同样的click事件好还是给1个ul标签绑定click事件好,可想而知.

  • 不用担心动态添加的节点(未来元素)没有绑定到事件.

未来元素该怎么绑定事件

  • 事件委托

  • <button =''></button>

  • 最傻逼的方法

<button>点击我</button><script>
  $('button').on('click', doSomthing);  
  setTimeout(function () {
    $('body').append('<button>点击我</button>');
    $('button').off('click'); // 不移除的话之前的button会叠加click事件
    $('button').on('click', doSomthing);
  } , 500)</script>

Jquery事件委托在IOS系统会失效!?

将事件委托给了document元素,具体绑定情况如下:

$(document).on('click', ".btn", function(){})

PC端测试和安卓测试都正常,但是在IOS端缺失效了!根据H5新定义,默认可点击的元素有a标签和button标签,也就是给这两种标签进行事件委托是完全没有问题的。

解决办法:
  • 给.btn加一个样式: cursor: pointer;

  • 按照规定, 点击元素使用button或者a标签

  • 把document换成.btn的父元素,前提是父元素不是跟随.btn一起动态添加进来的



作者:daydreammoon
链接:https://www.jianshu.com/p/ca4ebbd6c5c1


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消