Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS] nadanie wartości elementowi wyżej
Forum PHP.pl > Forum > Przedszkole
lustfingers
Witam mam taką strukturę kontenerów, i jest ich kilkanaście identycznych w układzie

  1. <li class="vir">
  2. <div class="radio">
  3. <span class=""><input type="radio" class="attribute_radio" name="group_4" value="34"></span>
  4. </div>
  5. </li>


Gdy jeden z nich zostanie zaznaczony do span dochodzi klasa checked:

  1. <li class="vir">
  2. <div class="radio">
  3. <span class="checked"><input type="radio" class="attribute_radio" name="group_4" value="34"></span>
  4. </div>
  5. </li>


Teraz dla tego właśnie kontenera <li class="vir"> w którym jest zaznaczony <span class="checked"> chce nadać inne tło. Czy jest to możliwe w css? Czy potrzebuje jakiś kod js który to obsłuży?
viking
W css nie jest to możliwe. W js musisz wyszukać element nadrzędny i go odpowiednio formatować.
trueblue
Zmień trochę strukturę i użyj: https://css-tricks.com/almanac/selectors/c/checked/
lustfingers
Generalnie nie za bardzo mogę zmienić układ, ogólnie ten span pojawia się automatycznie w kodzie, w samej strukturze pliku go nie ma więc jakiś skrypt go ładuje ale nie potrafie namierzyć gdzie on jest. Poza tym chyba jak bym namierzył to i tak w innym miejscu na stronie ta funcjonalność musi pozostać nie zmieniona, więc jak zjeśc ciastko i mieć ciastko tongue.gif

Za chwilę przeglądne link który podałeś, tymczasem przy okazji mógłby ktoś podesłać jakiś przykład js który pozwoli mi obsłużyć takie działanie, albo pod jaką nazwą szukać w googlu?
viking
https://jsfiddle.net/ao4wwwh1/

Jeśli masz jakiś framework typu jquery to parents() / parent()
lustfingers
Kod który podałeś umieściłem tak:

  1. <script type="text/jscript">
  2. $(function() {
  3. var x =document.querySelectorAll('span.checked');
  4. [].forEach.call(x, function(span) {
  5. span.parentElement.parentElement.classList.add('test');
  6. });
  7. });


Podczas ładowania strony domyślnie jeden element ma klasę checked i tam faktycznie jest dopisywana klasa "test", natomiast gdy zaznaczę inny element to nie ma żadnego zdarzenia które by usuwało klasę z tego li i dodawało do nowo zaznaczonego.

EDYCJA

Dostałem kilka kodów które powinny działać ale nie działają, wydaje mi sie że mają coś z klasami namieszane ale nie mogę dojść z tym ładu,w oryginale te kody któe dostałem wyglądają tak:

  1. $(function() {
  2. $('span.checked input').change(function() {
  3. var x = document.querySelectorAll('span');
  4. [].forEach.call(x, function(span) {
  5. if (span.parentElement.parentElement.classList.contains('checked')) { // check if li has class
  6. span.parentElement.parentElement.classList.remove('checked'); // remove class test from li
  7. }
  8. });
  9. this.parentElement.parentElement.parentElement.classList.add('test');
  10. }).change(); // .change will run for the 1st time when page loads
  11. });


kolejny to:

  1. $(function() {
  2. $('span.checked input').change(function() {
  3. var x = document.querySelectorAll('li.vir');
  4. [].forEach.call(x, function(li) {
  5. if (li.contains('checked')) { // check if li has class
  6. li.classList.remove('checked'); // remove class test from li
  7. }
  8. });
  9. this.parentElement.parentElement.parentElement.classList.add('test');
  10. }).change(); // .change will run for the 1st time when page loads
  11. });


i trzeci:

  1. $(function() {
  2. $('span.checked input').change(function() {
  3. $('li.vir').removeClass('test'); //remove class test from li
  4. $(this).closest('li').addClass('test'); // add class test to li
  5. }).change(); // .change will run for the 1st time when page loads
  6. });




EDYCJA 2

Mam działające rozwiązania które u mnie nie działają. Pytanie dlaczego to może u mnie nie działać?

Tutaj dwa teoretycznie działające rozwiązania, które u mnie nie ruszają:
https://jsfiddle.net/ukbgqn1c/4/
https://jsfiddle.net/ukbgqn1c/3/
viking
Zobacz w konsoli jakie masz błędy. I używasz jquery tak do wiadomości.
lustfingers
W konsoli nie mam błędów z tym związanych, jquery jest ładowane to jest PrestaShop i hederze są ładowane skrypty, tym bardziej ze to strona produktu więc musi być, teraz zmieniłem kod na:

  1. jQuery(document).ready(function() {
  2. $('span input:radio').change(function() {
  3. if (this.checked) { // if radio button is checked
  4. $('li.vir').removeClass('test'); //remove class test from li
  5. $(this).closest('li').addClass('test'); // add class test to li
  6. }
  7. }).change(); // .change will run for the 1st time when page loads
  8. });


więc tym bardziej w konsoli pokazało by mi że nie ma jquery.
trueblue
https://jsfiddle.net/ukbgqn1c/5/
lustfingers
To jest to, dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.