首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jquery .toggle()和浏览器的“后退”按钮

问Jquery .toggle()和浏览器的“后退”按钮
EN

Stack Overflow用户
提问于 2013-04-24 02:43:16
回答 1查看 839关注 0票数 0

我有一个相当简单的布局和一个非常奇怪的结果。

代码语言:javascript
复制
$(".main").on("hover", ".js_post", function () {
$(this).children('.js_del').toggle();
});

本质上,当用户将鼠标悬停在.js_post div上时,会切换.js_del div。下面是隐藏.js_del的css:

代码语言:javascript
复制
.js_del { display:none; }

现在,当光标悬停在.js_post上时,.js_del div会如预期的那样切换。但是,当用户单击.js_post目录中的链接,然后单击浏览器的后退按钮时,就会发生奇怪的事情……

在FF中,一切都如人们所期望的那样工作(即,浏览器将单击解释为鼠标左键并切换.js_del。)

然而,在Safari中,当用户单击back时,浏览器应用相反的切换(即,显示.js_del,当光标悬停在.js_post上时,.js_del链接消失)。

更奇怪的是...

我决定添加一个处理程序,在单击.js_del中的'a‘元素时手动隐藏.js_post div,如下所示:

代码语言:javascript
复制
$(".js_post").find("a").click(function () {
    $(this).parents('.js_post').children('.js_del').hide();
});

现在,当在Safari中查看时,一切工作正常,但在FF中,情况正好相反(即,.js_del正在显示,当光标悬停在.js_post上时,.js_del链接消失)!

有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 02:54:11

因为后退按钮不会使页面缓存表现出相同的行为,而且您不能确定dom元素的状态,所以toggle()调用可能会很粗糙。我分离了mouseenter和mouseleave,而不是hover(),并特别调用子选择器中的可见性。我还在最后抛出了一个.hide()调用,以标准化.js_del dom元素的可见性状态,而不考虑后退按钮浏览器的问题。

js

代码语言:javascript
复制
$(".main").on({
  "mouseenter":function(evt){
    $(this).children('.js_del:hidden').toggle();
  },
  "mouseleave":function(evt){
    $(this).children('.js_del:visible').toggle();
  }
}, ".js_post", null).find('.js_del:visible').hide();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16176849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档