2015-06-23 3 views
0

Я пытаюсь сделать кнопку включения/выключения для формы. Стиль кнопки зависит от значения флажка (отмечено/не проверено), и сам флажок скрыт. Я знаю, что вы можете использовать css для управления стилем (например, цвет кнопки метки). Есть ли способ изменить стиль своих родителей?Как создать ярлык в зависимости от значения флажка?

HAML (RoR):

%label.primary_btn 
    set as primary 
    = f.check_box :is_on, style: 'display:none;' 

HTML:

<label class="primary_btn"> 
    On/Off Button 
     <input name="post[images_attributes][0][is_on]" type="hidden" value="0"><input id="post_images_attributes_0_is_on" style="display:none;" type="checkbox" value="1"> 
</label> 

CSS:

.primary_btn { 
    float: left; 
    clear: both; 
    padding: 6px 10px; 
    border-top-left-radius: 9px; 
    border-top-right-radius: 9px; 
    border-bottom-right-radius: 9px; 
    border-bottom-left-radius: 9px; 
    color: white; 
    box-shadow: black 0px 1px 4px -1px; 
    cursor: pointer; 
    background-color: #6d6d6d; 
} 

Добавление комментария: Я не могу использовать 'для' в ярлыке, потому что я не может вызывать id вложенного поля :is_on. Благодаря!

+0

Посмотрите, что здесь можно сделать http://stackoverflow.com/questions/306635 62/use-images-like-checkboxes/ – jcuenod

+0

Спасибо @jcuenod, причина, по которой я не могу использовать это решение, - это приложение написано в RoR, и я не могу получить библиотеку nested_form, чтобы обеспечить настройку «для», label tag .. – Quin

+0

Мне любопытно, почему это не работает для вас: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-label_tag – jcuenod

ответ

0

Если вы измените ваш HTML немного, так что метка представляет собой родственный вход (и сразу после него), то есть:

<input type="checkbox" id="c1" /> 
<label for="c1">Some label</label> 

легко достичь с помощью только CSS, например:

input[type=checkbox]:not(:checked) + label {color: gray} 
input[type=checkbox]:checked + label {color: blue} 
+0

Ввод является дочерним элементом метки, поэтому невозможно выбрать только css (css не может выбрать родительский элемент) – kapantzak

+0

Вы правы, поэтому я предложил ** немного изменить свой html **. Это вариант, это будет проще и надежнее. –

+0

Спасибо @ TomekSułkowski за ответ! Что делать, если я не могу использовать «для» в ярлыке? Приложение находится в RoR, и я не могу установить атрибут «для» метки. Извините, я должен был сделать это более четко. – Quin

0

Проверка при загрузке и каждый раз, когда изменения CheckBox:

var labelStyle = function(elem) { 
    var lb = elem.closest('label'); 
    if (elem.is(':checked')) { 
     lb.removeClass('label-unchecked').addClass('label-checked'); 
    } else { 
     lb.removeClass('label-checked').addClass('label-unchecked'); 
    } 
} 

$(window).load(function() { 
    labelStyle($('#post_images_attributes_0_is_on')); 
}); 

$('#post_images_attributes_0_is_on').on('change', function() { 
    labelStyle($(this)); 
}); 
+0

У вас нет возможности установить флажок в рендеринге страницы (по бэкэнд) –

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