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

问题描述

当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 divspan 等),此时 click 事件会失效。

可以使用下面的代码在 iOS 中进行测试。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <title>iOS click bug test</title>

    <style>
        .container {
        }

        .target {
            display: block;
            text-align: center;
            margin: 100px 30px 0;
            padding: 10px 0;
            border: 1px solid #ccc;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="target"> Click Me! </div>
    </div>

    <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
    <script type="text/javascript">
        // 或者 $(document).on(‘click‘, ....)
        $(‘body‘).on(‘click‘, ‘.target‘, function (e) {
            alert(‘click‘);
        });
    </script>
</body>
</html>

  

解决办法

解决办法有 4 种可供选择:

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

?推荐后两种。从解决办法来看,?推测在 safari 中,不可点击的元素的点击事件不会冒泡到父级元素。通过添加 cursor: pointer 使得元素变成了可点击的了。

时间: 2024-12-30 03:05:37

iOS Safari 中点击事件失效的解决办法的相关文章

[转]iOS Safari 中click点击事件失效的解决办法

iOS Safari 中click点击事件失效的解决办法 问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. 解决办法 解决办法有 4 种可供选择: ?将 click 事件直接绑定到目标?元素(??即 .target)上 将目标?元素换成 

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

问题起因: 在微信公众号开发(微站)过程中用jquery的live方法绑定的click事件点击无效(不能执行) 问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. 解决办法 解决办法有 4 种可供选择: ?将 click 事件直接绑定到目标?元素(??即 .target)上 将目标?元素换成 <a> 或者 button 等可点击的?元素 ?将 cl

ext 3.2 tree 在IE10中点击事件失效的bug

ext3.2 中的tree在IE中进行兼容性测试,遇到IE10时,无法点击,其他版本的IE(7.8.9.11)均正常.此bug是由于ext-all.js中的getAttributeNS方法不能兼容IE10出错引起的,下载了ext3.4,这里的getAttributeNS 被重写了,将3.4中的方法写入3.2中的ext-all.js文件中,IE10中tree恢复正常. 修改前: getAttributeNS: Ext.isIE ? function(s, q) { var t = this.dom

vue中router-link的click事件失效的解决办法

title: vue中router-link的click事件失效的解决办法 toc: false date: 2018-12-04 16:28:49 categories: Web tags: vue 使用@click.native 问题原因: router-link会阻止click事件 .native指直接监听一个原生事件 原文地址:https://www.cnblogs.com/zmj97/p/10180674.html

关于苹果手机点击事件无效的解决办法

最近在开发一个公众号,有一个点击事件,在安卓手机上可以使用,但是放在苹果手机上就不行了,而且有两个页面都有这个点击事件,第一个页面在苹果手机上可以正常使用,第二个页面就不行,第一个页面使用的是 $('选择器').click(function(){}) 第二个页面使用的是事件委托 $('选择器').on('click','选择器',unction(){}) 看网上的回答是给事件源添加  cursor:pointer  ,但是还是不行,最后我把click事件换成了touchstart 事件就可以了,

vue中使用轮播图插件carousel,克隆的图片点击事件无效的解决办法

1 <div class="students-box" @click="clickSwiper"> 2 // 将点击事件绑定在父元素上 3 <carousel 4 :items="5" 5 :autoplay="true" 6 :nav="true" 7 :margin="20" 8 :loop="true" 9 :autoplayTimeout=&

ListView的长按事件和点击事件冲突的解决办法

在实际开发中,我们对一个item需要同时做点击和长按功能的时候可能会遇到冲突问题,就是我只想实现长按功能,不实现点击功能,这个时候就需要将长按事件中的方法返回值设为true, 例子如下: imageView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; }}); 这样就解决了点击和长按同时响应的问题.

IOS系统中点击失效

IOS系统中点击失效 问题 当委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. 例如: //加载更多 $('body').on('click','.showMoreData',function () { }) 问题原因 React attaches event listeners to the document. iOS doesn't fire click ev

ios移动端浏览器点击事件失效的解决方案

点击事件失效的原因可能是因为,你用了事件代理了, 比如这样 $(document).on("click",".fd",function(){ }) 这段代码在安卓机上是没有问题的,但是iso的自带浏览器和微信浏览器和其他浏览器都会失效,原因是ios规定,事件代理的元素只能是button元素其他一律不生效 想要解决这个问题,也很简单 1. $(document).on("click","button",function(){ }