iOS Safari点击事件失效的解决办法

做了一个需求,点击层之外的内容,当前DIV消失。这不就是 click 一下然后 $(e.target).closest(“xxx”) 解决吗?!然后开心的上线了。尼玛!果然有个坑!iOS点了之后没有任何反应~!于是打开了一个神奇的网址:http://www.baidu.com/,平时多动手,反正不收网费惹,我尼玛搜索结果点一波~,终于找到解决方案。

造成原因

当使用事件委托给一个元素添加click事件时,如果事件是委托到document或body上,并且委托的元素是默认不可点击的如div、span等,此时click事件会失效。 (这里说的是iOS Safari,安卓和PC不用管)

// $(document).click(function(e){ 这个无效
$("#cs-alert-box").click(function(e){
    if(!$(e.target).closest(".popover").length) {
        $(".popover").hide();
    }
});

解决方法:

  1. ​将click事件直接绑定到目标​元素(​​即.target)上
  2. 将目标​元素换成 <a>或者button等可点击的​元素
  3. ​将click事件委托到​​​​​非document或body的​​父级元素上
  4. ​给​目标元素加一条样式规则cursor: pointer;

可以,又涨知识了~

猜你喜欢

发表评论

最新发布