【问题标题】:Active state and display:none causes link not to work活动状态和显示:无导致链接不起作用
【发布时间】:2013-11-22 13:01:09
【问题描述】:

考虑以下小提琴:http://jsfiddle.net/GMA76/

在链接活动状态我想替换a标签的内容,那么它应该继续跟随链接。但是,当我按照小提琴和此处所示设置样式时:

a div:first-child{
    display:block;
}
a div:last-child{
    display:none;
}
a:active div:first-child{
    display:none;
}
a:active div:last-child{
    display:block;
}

该链接在您第一次单击时不起作用。它只替换内容,然后似乎重定向失败。

我该如何解决?

【问题讨论】:

  • 可能是因为点击事件对禁用元素不起作用...
  • 一个更简单的逻辑是替换要在锚标签中动态添加的 div,而不是保留 2 个标签

标签: html css


【解决方案1】:

浏览器不能很好地适应 :active 事件中的内容更改。即使它确实有效,纯 CSS 的解决方案也可能意味着用户在新页面加载(或开始加载白屏)之前甚至看不到内容的变化。我用:after 伪选择器和content 属性测试了很多,但这也没有用。

确实如此。 只能使用 Javascript 等语言更改内容。这是一个逻辑问题,超出了样式语言的范围。因此,我建议使用 Javascript。

我已经创建了一个快速的fiddle here 使用带有 jQ​​uery 的 Javascript(不需要 jQuery,但它更容易)来切换链接中的文本,然后在 1 秒后准确地转到新页面。这样,您只需要在 HTML 中包含原始链接,而不是使用 CSS 隐藏单独的链接。如果不仅仅是一两个链接,还有更灵活和可扩展的方法可以做到这一点,而是为了一个例子,看看小提琴。

这是 jQuery:

$(".switch-link").click(function(){
    $(this).text("Test Two");
    var href = $(this).attr('href');
    setTimeout(function(){
        window.location = href
    }, 1000);
    return false;
});

1000 是文本更改和浏览器开始加载新页面之间的延迟,您可以根据需要进行更改。

【讨论】:

  • 伙计,OP 甚至没有标记 JavaScript,而您提供的是 jQuery 解决方案
  • 他的问题是 DOM 操作,而 Javascript 是最好的解决方案。
  • 对不起,我在这一点上不同意。不要把我个人的 -1 拿走
  • 不用担心,不同意是有益的。我将研究一个纯 CSS 的解决方案,但如果 OP 正在考虑在这个项目中操作 DOM,那么我认为突出显示 Javascript 解决方案非常有帮助。
  • 很高兴看到您很好地接受了批评。如果你想出了一个仅 CSS 的解决方案,或者甚至是一个简单的 JavaScript 解决方案,我会立即收回我的反对意见。不知何故,我觉得 jQuery 对此有点过分了
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
相关资源
最近更新 更多