【问题标题】:How to I change this css psuedo button in Javascript/Jquery如何在 Javascript/Jquery 中更改此 CSS 伪按钮
【发布时间】:2015-11-06 07:38:25
【问题描述】:

我发现了这个非常好的复选框按钮样式(下面的链接),并且一直在尝试使用 jQuery 打开和关闭它。我之前没有使用过很多伪类,通常我只是添加一个“活动”类。

https://proto.io/freebies/onoff/

我需要在页面加载时根据服务器响应打开或关闭按钮,但我似乎无法在不破坏 CSS 的情况下操作 CSS。我该如何激活/停用此按钮?

.onoffswitch {
  position: relative;
  width: 90px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
}
.onoffswitch-checkbox {
  display: none;
}
.onoffswitch-label {
  display: block;
  overflow: hidden;
  cursor: pointer;
  border: 2px solid #999999;
  border-radius: 20px;
}
.onoffswitch-inner {
  display: block;
  width: 200%;
  margin-left: -100%;
  transition: margin 0.3s ease-in 0s;
}
.onoffswitch-inner:before,
.onoffswitch-inner:after {
  display: block;
  float: left;
  width: 50%;
  height: 30px;
  padding: 0;
  line-height: 30px;
  font-size: 14px;
  color: white;
  font-family: Trebuchet, Arial, sans-serif;
  font-weight: bold;
  box-sizing: border-box;
}
.onoffswitch-inner:before {
  content: "ON";
  padding-left: 10px;
  background-color: #34A7C1;
  color: #FFFFFF;
}
.onoffswitch-inner:after {
  content: "OFF";
  padding-right: 10px;
  background-color: #EEEEEE;
  color: #999999;
  text-align: right;
}
.onoffswitch-switch {
  display: block;
  width: 18px;
  margin: 6px;
  background: #FFFFFF;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 56px;
  border: 2px solid #999999;
  border-radius: 20px;
  transition: all 0.3s ease-in 0s;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
  margin-left: 0;
}
.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
  right: 0px;
}
<div class="onoffswitch">
  <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch" checked>
  <label class="onoffswitch-label" for="myonoffswitch">
    <span class="onoffswitch-inner"></span>
    <span class="onoffswitch-switch"></span>
  </label>
</div>

【问题讨论】:

  • 您不添加和删除伪类。它们只是基于元素的状态。
  • 您想以编程方式切换元素吗?切换的视觉状态由输入的checked 状态决定,因此更改checked 状态将改变切换的外观。
  • 正如@showdev所说,css按钮的状态基于复选框的状态。只需将复选框设置为 checked=true,css 按钮就会反映这一点。

标签: jquery html css pseudo-class


【解决方案1】:

您希望以编程方式更改状态,不要摆弄 CSS 类,

使用 jQuery 只是一个单行器:

 $('#myonoffswitch').attr('checked', false); // turn off
 $('#myonoffswitch').attr('checked', true); // turn on

http://jsfiddle.net/5eoujsm4/

动画更新:http://jsfiddle.net/5eoujsm4/1/

【讨论】:

  • 谢谢..您能解释一下示例中如何触发 :before 和 :after 事件吗?
  • 这些不是事件。事件是程序性的,:before:after 是 CSS 伪类,通过添加一些静态内容来控制给定元素的布局。
【解决方案2】:

您不能使用 javascript 删除 :before:after 选择器,因为这些是您制定的 CSS 规则。

相反,为您想要的创建两个单独的类:

.start-state:before {
    ...
}
.end-state:before {
    ...
}

然后将您的 javascript 更改为:

$(document).ready(function() 
{
      $('.onoffswitch-inner').addClass('end-state').removeClass('start-state');
}

或者,您可以将默认的:before 状态添加到您的.onoffswitch-inner CSS 规则,然后通过添加.onoffswitch-inner.active:before 规则覆盖它

这会让你做$('.onoffswitch-inner').toggleClass('active');

【讨论】:

  • 如果您要投反对票,请至少发表评论。
  • 考虑到提问者在编辑过程中改变了他的问题,我不知道这是否还能回答他的问题。感谢您通过@Mike 弥补它。
  • 我没有被否决,但考虑到他们所要做的就是改变输入的状态,这似乎有点过于复杂。正如 Jonathan 所说,跟上 OP 的不断编辑是令人困惑的。
  • 是的。在我写答案的时候,问题是“我如何打开/关闭 CSS 伪元素”。现在情况完全不同了。此时删除我的答案是否合适?
  • 是的 showdev 有点编辑了我的问题......但是让你的答案保持不变很好,它是一种学习的替代方法......谢谢
猜你喜欢
  • 2017-01-22
  • 2013-07-25
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多