我有一种“小部件” - 一个包含排序,行选择等丰富功能的数据表。
在某些情况下(在DOM中放置小部件/嵌套),在iOS 7 Safari中不会触发它的行。
Widget正在使用jQuery 1.6.4
我无法发布整个小部件代码(你真的不会发生这种情况;)),但我可以将复制方案缩小到以下情况:
div
,它通常是隐藏的并且变得可见,然后父行会悬停。仅使用CSS触发可见性click
事件处理程序。无论它做什么。在我的示例中,它将触发alert()
overflow-y
设置为auto
这是一个jsFiddle:http://jsfiddle.net/822eG/4/
在任何桌面浏览器上成功悬停项目,将触发单击。在iOS7上,悬停正在运行,但未触发点击。
注意:在iOS上,您必须点按两次才能触发click
。首次点击会触发hover
,您会看到一个“复选框”,然后第二次点击必须触发click
,但它不会...
任何这些条件都需要重现问题。删除一个,它开始工作......
如果删除“复选框”外观 - 单击将起作用(http://jsfiddle.net/822eG/5/)。
如果您移除高度修复 - 它将起作用(http://jsfiddle.net/822eG/6/)。
如果删除溢出滚动 - 它将起作用(http://jsfiddle.net/822eG/8/)。
需要任何解决方法,但应保持功能不受影响。所以,我无法删除“复选框”,大小修复,悬停,点击或溢出滚动。此外,改变HTML标记很难实现。
注意我有一个解决方案 - 请参阅下面的答案。但是我仍然需要一个更好的解决方法来尽可能地使用CSS。
ADD :向Apple提交了一个错误#16072132
答案 0 :(得分:7)
试试这个:
.wrapper {
-webkit-overflow-scrolling: touch;
}
答案 1 :(得分:2)
突然间,我有了一个解决方案......使用JavaScript我可以删除:hover
选择器,但仍保留功能。
如果我不是通过CSS :hover
触发复选框可见性,而是通过类触发,并通过javascript设置它,它将起作用。
答案 2 :(得分:2)
要让iOS忽略悬停状态,请尝试以下操作:
.wrapper
{cursor: pointer;}
您可以在任何元素上使用它以使其按预期运行。
答案 3 :(得分:1)
我当前的工作解决方案不需要对整个代码库进行任何更改,并且在我们的条件下正常工作
MutationObserver
,将节点插入head
link
,请选中document.styleSheets
document.styleSheets[n].rules[i].selectorText
访问)包含此选择器的:hover
检查样式display
不同的none
或与visibility
不同的visible
- 这是“悬停式展示”样式:hover
替换为.hover
并为body
和mouseenter
事件声明mouseleave
代理,以便切换.hover
1}}触发元素上的类答案 4 :(得分:-2)
..试着用这个:
$('.row').on('touchstart click', function(){
alert('clicked');
});