Добавление фона блоку при отмеченном чекбокс
Доброго времени суток!
Необходимо при отмеченном чекбоксе произвести смену фона у div. На данный момент удалось сделать смену только у label и только если кликнуть строго на сам чекбокс. Если кликнуть на span, то фон не меняется. Подскажите, пожалуйста, как у div сделать фон при отмеченном чекбокс и при клике на span и input? Спасибо. <div class="col-lg-3 put_off"> <label id="bx_117848907_1354_compare_link" class="checkbox-checked"> <input type="checkbox" data-entity="compare-checkbox"> <span data-entity="compare-title">Сравнить</span> </label> </div> $(window).load(function() { $('input[type="checkbox"]').each(function() { if ($(this).prop('checked')) { $(this).parent().addClass('checkbox-checked'); } }); $('input[type="checkbox"]').bind("change", function() { if ($(this).is(":checked")) { $(this).parent('label').addClass('checkbox-checked'); } else { $(this).parent('label').removeClass('checkbox-checked'); } }); }) .checkbox-checked { background: #FFCC00; } |
_marisha,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .checkbox-checked { background: #FFCC00; } .put_off label{ display: block; height: 100%; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $('.put_off').on('change', 'input[type="checkbox"]', function(event) { $(event.delegateTarget).toggleClass('checkbox-checked', this.checked) }).find('input[type="checkbox"]').trigger('change'); }); </script> </head> <body> <div class="col-lg-3 put_off"> <label id="bx_117848907_1354_compare_link"> <input type="checkbox" data-entity="compare-checkbox"> <span data-entity="compare-title">Сравнить</span> </label> </div> <div class="col-lg-3 put_off"> <label id="bx_117848907_1354_compare_link"> <input type="checkbox" data-entity="compare-checkbox" checked="checked"> <span data-entity="compare-title">Сравнить</span> </label> </div> </body> </html> |
рони, спасибо что откликнулись )
Отлично, фон меняется ) Но только меняется если именно кликнуть на чекбокс. А как сделать чтобы и при клике на сам span фон менялся? Можно ещё сделать так, но по id: $(window).load(function() { $('input[type="checkbox"]').each(function() { if ($(this).prop('checked')) { document.getElementById('checkbox').style.backgroundColor = "#FCAC7D"; } }); $('input[type="checkbox"]').bind("change", function() { if ($(this).is(":checked")) { document.getElementById('checkbox').style.backgroundColor = "#FCAC7D"; } else { $(this).parent('label').removeClass('checkbox-checked'); document.getElementById('checkbox').style.backgroundColor = "#fff"; } }); }) Но Ваш пример лучше :) |
Цитата:
|
Цитата:
|
Быть такого не может
|
_marisha,
:-? |
_marisha,
возможно у вас другая структура, а не та которую вы показали. |
рони, видео
Цитата:
|
рони, видимо "фон" подразумевает все и за текстом, и label, span должны иметь стиль block.
|
laimas, верно, "фон" подразумевается у всего div-a
|
_marisha,
Цитата:
.put_off label{ display: block; height: 100%; } |
В общем был скрипт, который менял логику работы чекбокса:
compare: function(event) { var checkbox = this.obCompare.querySelector('[data-entity="compare-checkbox"]'),//input target = BX.getEventTarget(event);//span checked = true; if (checkbox) { var checked = target === checkbox ? checkbox.checked : !checkbox.checked; /*Добавлена проверка*/ if (checked == true) { document.getElementById('button_on_checkbox').innerHTML = 'В сравнении'; document.getElementById('compare-active').classList.add('compare-active'); } else { document.getElementById('button_on_checkbox').innerHTML = 'Сравнить'; document.getElementById('compare-active').classList.remove('compare-active'); } /*Добавлена проверка*/ } var url = checked ? this.compareData.compareUrl : this.compareData.compareDeleteUrl, compareLink; if (url) { if (target !== checkbox) { BX.PreventDefault(event); this.setCompared(checked); } switch (this.productType) { case 0: // no catalog case 1: // product case 2: // set compareLink = url.replace('#ID#', this.product.id.toString()); break; case 3: // sku compareLink = url.replace('#ID#', this.offers[this.offerNum].ID); break; } BX.ajax({ method: 'POST', dataType: checked ? 'json' : 'html', url: compareLink + (compareLink.indexOf('?') !== -1 ? '&' : '?') + 'ajax_action=Y', onsuccess: checked ? BX.proxy(this.compareResult, this) : BX.proxy(this.compareDeleteResult, this) }); } }, Добавлена проверка на чекбокс. Сейчас вроде функционирует как нужно, т.е. если чекбокс отмечен, то применяется фон и меняется надпись. Возник вопрос в другом, каким образом сделать так, чтобы после перезагрузки страницы все стили сохранялись? На данный момент после перезагрузки страницы только чекбокс отмечен, а стилей нет |
Есть localStorage
Делаю так: if (checked == true) { var comparedText = document.getElementById('button_on_checkbox').innerHTML = 'В сравнении'; localStorage.setItem('comparedText', comparedText); if(localStorage.getItem('compareText') == 'В сравнении') { document.getElementById('button_on_checkbox').innerHTML = 'В сравнении'; } document.getElementById(`compare-active`).classList.add(`compare-active`); } В консоли у localStorage есть compareText, но при обновлении страницы надпись 'В сравнении' не сохраняется :-? |
Удалось сохранить стили после обновления страницы:
if (localStorage['checked'] == 'true' ) { var comparedText = document.getElementById('button_on_checkbox').innerHTML = 'В сравнении'; document.getElementById(`compare-active`).classList.add(`compare-active`); } Теперь возникла другая неприятность. Если у одного товара чекбокс отмечен, тогда у всех товаров кнопка выделена будто товар отмечен чекбоксом :( |
Часовой пояс GMT +3, время: 05:24. |