【问题标题】:How to make buttons remain 'active' after they're clicked?如何使按钮在单击后保持“活动”?
【发布时间】:2012-11-30 17:24:04
【问题描述】:

我目前正在为我的菜单项使用以下代码:

HTML

<li>
<a id="About" class="button" href="About Us.cshtml">About Us</a>
</li>
<li style="margin-left: 30px;">
<a id="Services" class="button" href="Services.cshtml">Services</a>
</li>
<li style="margin-left: 30px;">
<a id="Contact" class="button" href="Contact Us.cshtml">Contact Us</a>
</li>

CSS

#About {background-image: url(../Buttons/About.png); width: 87px;}
#Services {background-image: url(../Buttons/Services.png); width: 112px;}
#Contact {background-image: url(../Buttons/Contact.png); width: 117px;}
a.button {height: 20px; display: inline-block; background-repeat: no-repeat}
a.button:hover {background-position: 0 -20px;}
a.button:active {background-position: 0 -40px;}

我需要让按钮在被点击并且页面加载/刷新等后保持在“活动”状态。

如果解决方案需要 javascript,请记住,我是一名业余爱好者,所以我需要任何通俗易懂的解释(最好带有示例)。

【问题讨论】:

  • 我认为这个问题不值得-1。
  • 您希望它在页面加载之前保持活动状态,甚至在页面加载之后?后者要求您使用 javascript 获取 URL(并非不可能)。
  • 常用的方法是在链接上应用一个额外的类来模仿:hover,你用的是PHP还是什么?
  • 我是否正确,您正在寻找类似:visited 的东西?另见:hacks.mozilla.org/2010/03/…
  • 我认为唯一可靠的方法是使用服务器端脚本或 cookie。

标签: javascript html css button


【解决方案1】:

您需要确定您当前所在的页面。

var page = window.location.href;
page = page.substr((page.lastIndexOf('/') + 1));
page = page.split('.');
page = page[0];
//At this point you will have the current page only with no extension or query paramaters
//I.E. "About Us"
page = page.toUpperCase();
//This accounts for upper or lower casing of urls by browsers.
switch(page) {
    case "ABOUT US":
        $('#About').addClass('< name of active button class >');
        break;
    case "SERVICES":
        $('#Services').addClass('< name of active button class >');
        break;
    case "CONTACT US":
        $('#Contact').addClass('< name of active button class >');
        break;
}

如果您不使用 jQuery,请替换此行:

$('#< element name >').addClass('< name of active button class >');

用这一行:

document.getElementById("< element name >").className += " < name of active button class >";

希望这会有所帮助。

【讨论】:

  • 这样,只有他正在查看的页面才会有“活动”类。我认为他想让所有访问过的页面保持“活跃”
  • @MatheusAzevedo 这需要澄清。使您曾经按下的每个按钮都处于活动状态是没有意义的。那将被视为已访问。如果我在“联系我们”并且我来自“关于我们”,则“联系我们”在访问“关于我们”时处于活动状态。如果这确实是想要的,那么只需使用 标签的 :visited CSS 样式。
  • 实际上,如果此解决方案仅导致当前页面处于“活动状态”,那么这正是我正在寻找的。不过我不是 JS 专家……我到底需要在哪里插入上面的代码?另外,“”指的是什么?我应该用什么来代替它吗?
  • @LeonLawrence 元素名称将是按钮的 id 属性。 (即“关于”、“服务”或“联系方式”)。就类而言,您放置您创建的 CSS 类的名称。上面的代码需要放在一个在文档准备好的部分中运行。 $(document).ready(function () { _Place Code Here_ } });。对不起,我也应该问的。您使用的是 jQuery 框架还是只是普通的 javascript?
  • @LeonLawrence 如果您不使用 jQuery,您仍然可以确定文档何时准备就绪,并通过应用以下侦听器来应用此编码:`document.addEventListener("DOMContentLoaded", function(){ document.addEventListener("DOMContentLoaded", function(){ document. removeEventListener( "DOMContentLoaded", arguments.callee, false ); }, false );
【解决方案2】:

最好只坚持使用带有一些 JS 的 CSS 类。通过这种方式,您可以混合使用伪类 (:hover) 和 CSS 类的两种样式。

$('.myButtonLink').click(function() {
  $(this).addClass('active_class');
});

或者如果你想切换它。

$('.myButtonLink').click(function() {
  $(this).toggleClass('active_class');
});

这样,如果您的布局发生任何变化,您只需更新属于该类的 CSS 样式,而不必更新您的 JavaScript 代码。

您可以使用 window 或 localStorage 元素在页面刷新时保持舞台。

var key = getStorageKeyFromLink(link);
window.activeStateLookup = window.activeStateLookup || {};
window.activeStateLookup[key] = {
  element : link
};

现在,当您的页面加载时,您可以更新所有图片:

window.onload = function() {
  var lookup = window.activeStateLookup || {};
  for(var key in lookup) {
    var element = lookup[key].element;
    element.addClass('active_class');
  }
}

--- 编辑 ---

这是您的演示。

该示例使用 localStorage,但它与 window 对象的工作方式相同。请务必复制并粘贴代码并在您的本地机器上试用它,因为 jsfiddle 有一些阻止正在发生的事情。

http://jsfiddle.net/GDXLb/7/

【讨论】:

  • 我需要让按钮在被点击并且页面加载/刷新等后保持在“活动”状态。为什么这是正确的?
  • @matsko 这和加里的例子没有同样的问题吗?页面重新加载后,DOM 将被清除,这意味着您刚刚添加的类将丢失且无关紧要。课程不会在页面之间停留。
  • 然后使用localStorage来维护状态。或者使用窗口元素。
  • @matsko - 1. 我不需要“切换”功能。因此,我是否需要实现您提供的第一、第三和第四块代码? 2. 我是否应该假设我应该用 '.button' 替换 '.myButtonLink',因为这是我正在使用的类?或者我应该用 id 替换,例如'关于'? 3. 我应该用 '.button:active' 替换 'active_class' 吗? - 请说清楚。 4. 我需要将这 3 个代码块中的每一个都封装在
  • 我的帖子有点修补,因为我更改和添加内容太快了。看看我发布的演示。基本上,您可以将 JavaScript 代码放入它自己的文件中,并在之前将其包含在脚本标记以及 jquery 的脚本标记中。然后将 CSS 内容包含到它自己的文件中,并使用 元素将其链接到页面。
【解决方案3】:

您可以使用一点jquery 来查看url 是什么,对其进行解析,然后将active 类重新应用于相应的链接。

I.E(我还没有测试过这个......这更像是一个想法......)

var path = window.location.pathname;

$(a).each(function(){
    if (path.indexOf($(this).prop("href")) > 0){
        $(this).child("button").addClass("active");
        break;
    }
});

【讨论】:

  • 可能看起来像一个愚蠢的问题,但我应该将以上内容粘贴到 .js 文件中并在我的网页的 中引用它吗?无论哪种方式,Webmatrix 都在标记:“不能在循环之外有'break'”。按钮也不会保持活动状态。我很感激帮助。否则我会迷路 - 你能澄清一下吗?谢谢。
  • 如前所述,未经测试,仅作为示例。虽然删除休息并尝试。 each 实际上是在执行循环 - 它是 jquery。您通常会将 javascript 放在页面的头部。要使这个工作,您还需要引用jquery 脚本。去jquery.com获取库和安装帮助。
  • 其他人说服务器端也是一种选择。我想我们要为您提供更多帮助,您需要说出您的语言能力。
  • 在 html 和 css 中的能力模糊。就是这样... :-/
  • 是的,您需要学习一些javascript 才能在浏览器端执行此操作。强烈推荐使用jquery,因为它封装了很多你需要做的事情,并且可以通过简单的调用来完成。
【解决方案4】:
$('.myButtonLink').click(function() {
 $(this).css('background-position', '0 0');
});

DEMO

【讨论】:

  • 我需要让按钮在被点击并且页面加载/刷新等后保持在“活动”状态。为什么这是正确的?
  • @Garry 如果页面刷新,您将丢失刚刚添加的课程。
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 2019-10-04
  • 2021-03-26
  • 2021-02-18
  • 2019-04-09
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
相关资源
最近更新 更多