2015-11-05 2 views
0

Я нашел этот очень хороший стиль кнопки флажка (ссылка ниже) и пытался включить его и выключить с помощью jQuery. Раньше я не использовал много псевдоклассов, обычно добавляю «активный» класс.Как я могу изменить эту кнопку psuedo css в Javascript/JQuery

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

Вы хотите программно переключить элемент? Визуальное состояние переключателя определяется состоянием «проверено» на входе, поэтому изменение состояния «checked» изменит внешний вид переключателя. – showdev

+0

как @showdev говорит, что состояние кнопки css основано на состоянии флажка. Просто установите флажок checked = true, и кнопка css должна отразить это. –

ответ

4

программно хотите, чтобы изменить состояние, не возиться с классами CSS,

Просто Oneliner с помощью JQuery:

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

http://jsfiddle.net/5eoujsm4/

анимированный обновление: http://jsfiddle.net/5eoujsm4/1/

+0

Спасибо .. вы можете объяснить, как: before и: after event в примере? – Orbitall

+0

Это не события. События являются процедурными, ': before' и': after' - это псевдо-классы CSS, управляющие компоновкой данного элемента путем добавления некоторого статического содержимого. –

0

Вы не можете удалить :before или :after селекторы с помощью JavaScript, потому что те правила 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');.

+1

Если вы собираетесь голосовать, по крайней мере, оставляйте комментарий. – Mike

+0

Учитывая, насколько ассер изменил свой вопрос своими праведниками, я не знаю, даже ли это даже на его вопрос. Спасибо за выравнивание, хотя @Mike. – jperezov

+0

Не был ли это замедленным, но это выглядит немного сложнее, учитывая, что все, что им нужно сделать, это изменить это состояние ввода. Как говорит Джонатан, неудобно идти в ногу с постоянными изменениями OP. – TheCarver

Смежные вопросы