点击事件未在 iOS 上触发

Posted

技术标签:

【中文标题】点击事件未在 iOS 上触发【英文标题】:Click events not firing on iOS 【发布时间】:2014-08-15 20:28:33 【问题描述】:

我有一个包含嵌套列表的列表,我想在单击它们时打开它们。它在桌面和各种浏览器上都可以正常工作,但是当我使用 ios 时,无论是 iPad 还是 iPhone,它都不想工作。

列表如下所示:

<ul class="lessonList">
   <li class="lessonItem" id="1"><input type="checkbox" class="scopeCheck">Default Scope
      <ul style="display:none;" class="scope1">...other content in here</ul>
   </li> 
</ul>

和这样的代码:

$(document).on("click",".lessonItem",function(e)
    e.stopImmediatePropagation();
         $(this).children("ul").slideToggle();

);

我有一个 stop immediateprop 来停止单击复选框以激活滑动切换,但是在 iOS 上,它甚至不会下降,直到(且仅当)您选中该复选框。在 iOS 设备中单击 li 本身不会执行任何操作。

【问题讨论】:

【参考方案1】:

如果您将此样式添加到 &lt;li&gt; 元素,它会起作用:

li  cursor: pointer; 

JSFIDDLE DEMO

这似乎是 iOS 事件的一个错误 - reference。

【讨论】:

哇,多么奇怪的修复。知道为什么会这样吗?【参考方案2】:

我也遇到了这个问题,CSS 光标技巧对我不起作用。

幸运的是,在玩了一些之后,我发现点击事件总是传输到锚标签,并且能够通过将我的 Div 容器更改为锚标签来解决我的问题。

【讨论】:

谢谢,这对我有用。我还发现绑定到“touchstart”和“click”对我有用。【参考方案3】:

这发生在非常特殊的条件下:

为可点击的元素设置 :hover 规则。该规则中的样式无关紧要,该规则甚至可以为空。 有一个 CSS3 相邻兄弟规则,其中包含一个最具体的术语,该术语与 DOM 中的至少一个元素匹配。它不需要匹配整个规则。同样,规则甚至可以为空。 可点击元素后跟一个元素(也可以作为第一个元素包裹在元素内)。

您有一个可点击元素的 :hover 规则。该规则中的样式无关紧要,该规则甚至可以为空。 并且您有一个 CSS3 相邻兄弟规则,其最具体的术语与 DOM 中的至少一个元素匹配。它不需要匹配整个规则。同样,规则甚至可以为空。 并且可点击元素后跟一个元素(也可以作为元素内的第一个元素包装)。 在这种情况下,点击可点击元素(无论该点击是 javascript onclick 处理程序,还是只是一个简单的 )不会注册。相反,它应用 :hover 样式,并且只有在第二次点击时它才会导航或运行 JavaScript。这只发生在 Mobile Safari 上几乎所有的改变都会使 bug 消失,所以所有这些都是有效的解决方法:

在检查我们的代码后,所有这些条件都适用于我们,但删除这些条件也是不切实际的。

【讨论】:

这是我的情况,但我很困惑我应该如何修复这个错误。

以上是关于点击事件未在 iOS 上触发的主要内容,如果未能解决你的问题,请参考以下文章

关于ios上点击事件触发经过导致layui nav跳转的bug

iOS:仅在 iOS 13 上不会触发点击事件

在 div 上启动时未在 iOS 上触发 touchend 事件

选择器更改事件未在 Titanium 中首次触发

Javascript onloadedmetadata 事件未在 iOS 设备上触发

微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题