HTML, щелкнув div, а затем выделив

Я создал это с помощью гибкой коробки

HTML, щелкнув div, а затем выделив

.itemy:hover {
  background-color: #7f7f7f;
}
<div class = "drinkDisplay">
  <?php
    if ($arr5!= = "Drinks" && $arr5!= = "Add Ons" && $arr5!= = "A la carte" && $arr5!= = "Dessesrts"){
      for($i=0;$i<$numrowsDrinks;$i++){
        echo "<div id='$drinkId[$i]' class='itemy'> 
                  <img src= $drinkImage[$i] alt = $drinkName[$i]>                       <div class='textcontainer'><p>$drinkName[$i]<br>PHP +$drinkPrice[$i]</p></div></div>";
                    }

                }
              ?>
</div>

прямо сейчас, когда он зависнет, он выделит хороший элемент. Но я бы хотел, чтобы, когда я щелкнул div (itemy), он сохранил эту подсветку. Я пробовал следующий код js, но он не сохранял выделение после щелчка. (показано ниже)

var addclass = 'color';
var $cols = $('.itemy').click(function() {
  $cols.removeClass(addclass);
  $(this).addClass(addclass);
});
.color {
  background-color: #7f7f7f;
}

Я также хотел бы получить доступ к данным выделенного div позже, когда, скажем, пользователь нажимает кнопку, которую я хотел бы получить, скажем, идентификатор выбранного div.

Большое спасибо за Вашу помощь

Код, который вы включили в свой вопрос, работает так, как вы ожидаете. Он отключит выделение других элементов, а элемент, по которому щелкнули, будет иметь цвет фона.

Tyler Roper 01.10.2018 15:56

За исключением того факта, что вы не используете передовой опыт при объявлении переменных: нотация имени переменной (без верблюжьего регистра и запутанного имени), плюс использование var вместо let или const. (Здесь следует использовать const). Все работает. Попробуйте написать более конкретный селектор, например .drinkDisplay .itemy.color { }

Mihai T 01.10.2018 15:56

@MihaiT Ни одно из описанных вами вещей не является "неправильным".

Tyler Roper 01.10.2018 15:57

@TylerRoper ну .. не ошибаюсь, но не используя лучшие практики :)

Mihai T 01.10.2018 15:58

@TylerRoper да, подсветка работает как надо. просто я хотел бы (поверх уже размещенного выделения) иметь выделение щелчком, которое сохраняется до тех пор, пока я не щелкну другой элемент.

Jake quin 01.10.2018 16:01

@ Джек Верно. Код, который у вас есть в вашем вопросе, делает именно это. Посмотреть здесь - Я буквально скопировал + вставил ваш фрагмент, и он работает. По сути, проблема с вашим кодом - нет в вашем вопросе, поэтому мы можем только «догадываться» о том, что может быть не так. Измените свой вопрос, включив в него полный репродукцию проблемы (включая HTML и CSS).

Tyler Roper 01.10.2018 16:03

наверняка вам просто нужно привязать событие щелчка к чему-то, а затем получить все выбранные вами элементы с помощью $('.itemy.color')? Также, что не работает с вашим событием щелчка, чтобы добавить и удалить цветовой класс? но безрезультатно не объясняет, в чем проблема - добавляет ли класс, не удаляет ли - какова точная природа проблемы?

Pete 01.10.2018 16:06

О, здесь выстрел в темноте. Есть ли у вас jQuery?

Mihai T 01.10.2018 16:10

Этот код находится в конце вашего <body> или в <head>? А если в <head>, то внутри ли $(document).ready( ... )? Я голосую за закрытие этого вопроса, поскольку он просто превращается в игру в угадайку. Пожалуйста, рассматривайте возможность добавления Минимальный, полный, проверяемый пример.

Tyler Roper 01.10.2018 16:10

@TylerRoper, извините, у меня проблема с щелчком, после щелчка подсветка не остается.

Jake quin 01.10.2018 16:13

@MihaiT да вот и линия. <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jque‌​ry.min.js"></script>

Jake quin 01.10.2018 16:14

@TylerRoper он находится примерно посередине тела, в теле есть верхние и нижние колонтитулы.

Jake quin 01.10.2018 16:15

@Jack Середина тела - очень странное место для любого JS. Это до ваши элементы itemy? Если этот код находится на странице перед вашими элементами itemy и не ожидает загрузки страницы, вы пытаетесь прикрепить события щелчка к элементам, которые еще не существуют. Код для поиска элементов itemy будет запущен до того, как элементы itemy появятся на странице.

Tyler Roper 01.10.2018 16:15

@Jack, я почти уверен, что проблема в селекторе CSS. попробуйте использовать .itemy.color {..} или .drinkDisplay .itemy.color {...}. Также попробуйте проверить html-код и сообщить нам, добавлен ли класс color при нажатии на элементы

Mihai T 01.10.2018 16:18

Посмотрите свой пример онлайн, работающий без проблем jsfiddle.net/2reycn3a

ℛɑƒæĿᴿᴹᴿ 01.10.2018 16:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
15
83
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Самое простое решение:

var addclass = 'color';
var $cols = $('.itemy').on('click hover', function() {
  $(this).addClass(addclass);
});

Лучший:

var addclass = 'color';
var $cols = $('.drinkDisplay').on('click hover', '.itemy', function() {
  $(this).addClass(addclass);
});

Доступ позже с помощью js:

var addclass = 'color';
var $cols = $('.drinkDisplay .itemy').filter(function( index ) {
  return $(this).hasClass(addclass);
})

Ответы только на коде редко бывают "хорошими" ответами по нескольким причинам. Во-первых, это игра в «найди разницу». Что вы изменили? Во-вторых, они не часто объясняют, что OP сделал неправильно. Почему вы изменили то, что сделали? Что OP сделал не так? Помимо всего этого, единственное различие, которое я вижу в вашем ответе, заключается в том, что вы добавили событие hover, которое на самом деле не имеет никакого отношения к тому, о чем просил OP.

Tyler Roper 01.10.2018 16:01

1.Simplest Solution -> просто добавляет класс к элементам, когда они зависают и / или щелкают. Он никогда не удалит этот класс. Это не то, чего ожидает ОП. 2. Best делает то же самое. 3. Access later by js -> зачем вам делать фильтр, если вы можете выбрать их с помощью CSS или $('.color') ? также вы добавили index в качестве аргумента, но никогда не использовали его. Также фильтр возвращает массив. Вы слишком усложняете

Mihai T 01.10.2018 16:03

Мне жаль, но я не смог заставить его работать. Есть ли что-нибудь еще, о чем я должен знать, помимо помещения вашего кода в тег <script>?

Jake quin 01.10.2018 16:09

Хотя у меня нет всего вашего файла CSS для проверки, у класса .color, скорее всего, нет достаточно высокая специфичность, чтобы переопределить исходный стиль .itemy.

Попробуйте изменить объявление класса .color, чтобы оно было более конкретным, например ...

.itemy.color {
  background-color: #7f7f7f;
}

Это требует, чтобы элемент был как itemy, так и color, поэтому он более конкретен. Это не полностью поддерживается в старых браузерах, но есть другие способы повышения специфичности, которые более обратно совместимы (например, указание родительских элементов, таких как .grandparent .parent .color).

Используйте два класса для раскраски: один для события onHover, скажем, «завис», а второй - для долгосрочного выбора, например, «выбран».

При наведении курсора удалите класс hovered со всех кнопок и добавьте его к той, на которой наведен курсор, как и вы. Когда пользователь щелкает, добавьте вместо него класс selected, чтобы наведение не мешало выделению.

var hoverClass = "hovered";
var selectionClass = "selected";
//code for hover
$('.itemy').hover( function() {
    $('.itemy').removeClass(hoverClass);
    $(this).addClass(hoverClass);
});
//code for clicking if you want to be able to select multiple items
$('.itemy').click( function() {
    $(this).toggleClass(selectionClass);
});
//code for clicking if you want to be able to select only a single item
$('.itemy').click( function() {
    $('.itemy').removeClass(selectionClass);
    $(this).addClass(selectionClass);
});

Установите CSS для обоих классов по своему усмотрению. Если вы хотите, чтобы это было то же самое, вы даже можете установить один и тот же CSS для нескольких селекторов, например:

.hovered, .selected {
    //...your style here
}

Хотя я не буду отрицать его, я не могу не чувствовать, что любые ответы на этот вопрос будут просто догадками, потому что исходный вопрос не по теме. Ответить на вопросы, не относящиеся к теме, обычно основания для отрицательного голоса.

Tyler Roper 01.10.2018 16:14

Вы совершенно правы, @Tyler Cooper. Я пытался сказать, что он должен различать выбранные и зависшие состояния в целом. Это просто толчок в каком-то направлении. Как вы сказали, трудно дать однозначный или оптимальный ответ из-за характера вопроса. Я ценю, что вы это обдумали.

Dropout 01.10.2018 16:17

ваш слушатель "щелкнет" должно быть в функции документ готов для работы (смотрите подробности).

Ваши специфические свойства CSS могут работать с .color или .itemy:hover.

В конце фрагмента Javascript Follow я добавил функцию для получения идентификатора выбранного элемента :) Надеюсь, это поможет.

$(document).ready(function() {
  var addclass = 'color';
  var $cols = $('.itemy').click(function() {
    $cols.removeClass(addclass);
    $(this).addClass(addclass);
  });
});

function getSelectedItemId() {
  var id = $('.color').attr("id");
  $('.result').html(id);
}
.color,
.itemy:hover {
  background-color: red;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div class = "drinkDisplay">
<div onclick = "javascript:getSelectedItemId();">click here to get id</div>
<div class = "result"></div>
  <div id='1' class='itemy'>
    <div class='textcontainer'>
      <p>Test 1<br>example 1</p>
    </div>
  </div>
  <div id='2' class='itemy'>
    <div class='textcontainer'>
      <p>Test 1<br>example 1</p>
    </div>
  </div>
  <div id='3' class='itemy'>
    <div class='textcontainer'>
      <p>Test 1<br>example 1</p>
    </div>
  </div>
  <div id='4' class='itemy'>
    <div class='textcontainer'>
      <p>Test 1<br>example 1</p>
    </div>
  </div>
  <div id='5' class='itemy'>
    <div class='textcontainer'>
      <p>Test 1<br>example 1</p>
    </div>
  </div>
</div>

Спасибо @Tyler за дополнительную информацию.

Спасибо за отзыв @TylerRoper, я отредактировал свой ответ!

André DS 01.10.2018 16:17
Ответ принят как подходящий

Спасибо всем, кто проявил ко мне терпение.

$(".itemy").on("click", function() {
      $(".itemy").css("background-color","");
      $(this).css("background-color", "red");

Вот код, который у меня сработал :) Теперь я могу щелкнуть по нему, спасибо! :)

у этого кода все еще есть небольшая проблема, заключающаяся в том, что он позволяет выделять несколько элементов, и это должен быть только один. Продолжу искать ответ.

edit: теперь он полностью работает с приведенным выше кодом;

Другие вопросы по теме