Safari iphone/ipad 在新链接上的“鼠标悬停”在前一个被替换为 javascript 后

Posted

技术标签:

【中文标题】Safari iphone/ipad 在新链接上的“鼠标悬停”在前一个被替换为 javascript 后【英文标题】:Safari iphone/ipad "mouse hover" on new link after prior one is replaced with javascript 【发布时间】:2011-03-08 10:09:03 【问题描述】:

点击 iphone 或 ipad 上的链接后,它会留下一个模拟鼠标悬停,触发该链接上的 a:hover css 样式。如果链接有一个 javascript 处理程序使您保持在同一页面上,那么在您单击另一个链接之前,悬停状态不会改变。

如果您有一个 ajax 小部件提出问题并且每个答案都是链接,这会变得很奇怪。当您触摸其中一个答案时,它会以悬停状态突出显示,然后当问题和答案被新问题和答案替换(使用 javascript)时,出现在与先前答案相同位置的新答案具有悬停状态自动触发。 我想防止新的答案链接发生这种情况

有什么方法(可能是 javascript 中的某些东西)可以给我与“悬停”不再位于此元素上方相同的结果?

注意事项:

我知道我可以让 a:hover 使用与 a 相同的 css 样式,但 a:active 样式几乎不引人注意,因为触摸点击的活动状态是如此短暂,所以我希望有一些东西可以在链接上显示悬停状态,直到我用新的 html 替换它 我在 javascript 中尝试了多种方法,例如在 dom 元素上调用“blur()”和其他一些东西,但没有运气——我开始认为最好的解决方案是将类应用于链接在 javascript 事件上自行管理悬停状态(或保持原样)

【问题讨论】:

【参考方案1】:

问题在于,当您替换内容时,Mobile Safari 会将新元素视为旧元素,因为它们在 DOM 中占据相同的位置。一种解决方法是先删除旧元素,然后异步添加新元素。最简单的方法是使用setTimeout()

http://jsfiddle.net/chad/JNZvu/10/

// When we click on an answer
$('body').on('click', '.answer', function()
  // don't follow it's link
  event.preventDefault();
   // fade out the container
  $('.container').fadeOut(function()
    // remove old elements (happens after fadeOut because we are in the callback)
    $('.container').html('');
    // add new elements asynchronously and fade container back in.
    setTimeout( '$(\'.container\').html(\'<a class="answer" href="#c">link 3</a><a class="answer" href="#d">link 4</a>\');$(\'.container\').fadeIn();', 0);
  );
);

真正执行此操作时,fadeOut 将与 AJAX 函数同时被调用,然后在 AJAX 回调中进行删除/添加。

【讨论】:

【参考方案2】:

您可以尝试编写另一个 :hover 规则,该规则在父级具有特定类时激活,实际上否定了现有的悬停规则。父类上的类需要在 touchend 时添加并在 touchstart 时删除,以便默认规则可以在下一个单击或触摸的链接时生效。

我刚刚解决了一个类似的问题,我想要列表项的悬停样式,但是由于父级可以使用 iscroll 用一根手指滚动,所以我需要在滚动列表移动后立即取消悬停效果。它使用 jQuery,但你明白了:

$('ul.scroll').bind('touchmove', function(e) 
    $(this).addClass('moving');
);
$('ul.scroll').bind('touchstart', function(e) 
    $(this).removeClass('moving');
);

这是我的风格规则:

ul.scroll li:hover 
    background-color: #D1E8DA;

ul.scroll.moving li:hover 
    background-color: #EFEFEF;

【讨论】:

以上是关于Safari iphone/ipad 在新链接上的“鼠标悬停”在前一个被替换为 javascript 后的主要内容,如果未能解决你的问题,请参考以下文章

在 iPad/iPhone 上的 CSS 提交按钮奇怪的渲染

Safari iPhone/iPad 中的 Nan 错误日期

在播放框架中渲染视频

CSS 背景位置在 Mobile Safari (iPhone/iPad) 中不起作用

iPhone / iPad 控制台? [复制]

为啥在 iOS Safari Mobile (iPhone / iPad) 中没有触发模糊事件?