如何在Javascript / Jquery

时间:2015-11-05 19:04:40

标签: jquery html css pseudo-class

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

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

我需要根据服务器响应在页面加载时打开或关闭按钮,但我似乎无法操纵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>

2 个答案:

答案 0 :(得分:4)

你以编程方式想要改变状态,不要乱用CSS类,

使用jQuery只是一个oneliner:

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

http://jsfiddle.net/5eoujsm4/

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

答案 1 :(得分:0)

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

相反,请根据需要创建两个单独的类:

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

然后将您的javascript更改为:

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

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

这样您就可以$('.onoffswitch-inner').toggleClass('active');