jquery 按钮链接保持下划线,直到单击另一个按钮

jyztefdp  于 2023-06-22  发布在  jQuery
关注(0)|答案(2)|浏览(96)

我有一个页面,我们正试图改变到2个不同类别的领导加载后,点击一个按钮。而不是把它们一个放在另一个上面。我能够实现领导类别的变化对领导组按钮的点击。但是,当该类别在页面加载时处于活动状态或单击按钮以外的任何位置后,我无法使按钮保持下划线。
https://auduboncosites.wpengine.com/who-we-are/leadership/
我已经尝试了几种不同的解决方案,但它们似乎不适用于我的问题,而且我找到的解决方案都很旧。实际上我不认为我使用的JS在这个示例中做了任何事情,而且目前都是基于CSS的下划线。
CSS:

.active:focus, .active:active, .active:visited {
    text-decoration: underline;
}

JS:

var $buttons = jQuery('button');
$buttons.on('click',function() {
  jQuery(this).toggleClass('active').siblings('button').removeClass('active');
})

我希望有人能帮我找到解决办法。
谢谢

mbzjlibv

mbzjlibv1#

这就是HTML/CSS中:focus状态的工作方式。你已经点击了某个东西,现在你的焦点在你点击其他东西之前。看看下面的demo。当有焦点时,它将有一个绿色的边界。点击一个,它有焦点。单击离开或按Tab键更改焦点。
如果你不想这样的话,就删除你的:focus样式。

button {
  border: 4px solid #333;
  font-weight: bold;
  font-size: 16px;
}

button:active {
  color: red;
}

button:focus {
  border-color: lightgreen;
  outline: none;
}
<button type="button">one</button>
<button type="button">two</button>
<button type="button">three</button>

修改/编辑答案

我不知道你想保持链接下划线。在这种情况下,这甚至更容易。您只需要在选中某个类时应用它,然后将它从其他类中删除。它非常接近你已经发布的代码,但我认为你只需要有更简单的CSS,而不扰乱:focus状态。如果应用了类,则它看起来是活动的。就是这样。
这是一个使用jQuery的版本。

var $buttons = $('button');
$buttons.on('click', function() {
  $(this).addClass('active').siblings('button').removeClass('active');
});
button {
  padding: 5px;
  font-weight: bold;
}

.active {
  text-decoration: underline;
  background-color: lightgreen;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button type="button">one</button>
<button type="button">two</button>
<button type="button">three</button>

这里有一个版本可以做同样的事情,但不需要jQuery。

document.querySelectorAll('button').forEach(function(thisBtn) {
  thisBtn.addEventListener('click', function() {
    var prevBtn = document.querySelector('button.active');
    if(prevBtn) {
      prevBtn.classList.remove('active');
    }
    
    thisBtn.classList.add('active');
  }, false);
});
button {
  padding: 5px;
  font-weight: bold;
}

.active {
  text-decoration: underline;
  background-color: lightgreen;
}
<button type="button">one</button>
<button type="button">two</button>
<button type="button">three</button>
vs91vp4v

vs91vp4v2#

正如我从问题和附加代码中所理解的,您希望在单击时对特定按钮进行样式化,并且在单击其他位置时不应影响此效果。您提供的代码包含更多详细信息。您必须有一个包含活动类的焦点按钮,并且希望即使该按钮没有焦点,效果也能继续。光靠上课就够了,不需要靠专注。

Here's a code for the solution:

 https://codepen.io/mohammed-albadry/pen/wvQaPLq.

相关问题