JQuery .show() работает, но .hide() не работает

Я пытаюсь создать раскрывающийся список выбора в js, который мне приходится использовать js, поскольку он включает изображения. Проблема в том, что когда я нажимаю на «поле ввода», я создал код jquery, чтобы открыть его, т.е.

$('#ratingDropdownContainer').on('click', function() {
    if ($('#dropdownListContainer').css('display') == 'none') {
        $('#dropdownListContainer').show();
    }
})

и нет никаких проблем. Но когда пользователь выбирает один из вариантов, .hide() не будет работать. Встроенный стиль

style = "display: block;"

не меняется, когда я это делаю $('#dropdownListContainer').hide();

Я пробовал много вещей, таких как: убедиться, что он заключен в $(document).ready(function(), проверить, распознает ли js, что его отображение является блоковым (что соответствует console.info("okokoko");, как показано в моем коде ниже), я проверяю, что мой jquery загружается до моего js вместо этого я попробовал использовать vanilla js, но ни один из них не сработал, и я не понимаю, почему .show() будет работать, а .hide() — нет. Любая помощь будет оценена по достоинству.

Спасибо.

js:

$('#ratingDropdownContainer').on('click', function() {
    if ($('.dropdown-list-container').css('display') == 'none') {
        $('.dropdown-list-container').show();
    }
})

$('.avg-rating-select').on('click', function() {
    var selectedRatingImg = $(this).find('img').prop('outerHTML');
    var selectedRatingText = $(this).find('p').prop('outerHTML');

    var newDiv = $("<div>" + selectedRatingImg + selectedRatingText + "</div>");
    newDiv.addClass("rating-selected-container");

    if ($('.rating-selected-container').length) {
        $('.rating-selected-container').replaceWith(newDiv);
    } else {
        $('.rating-dropdown-inner-text p').replaceWith(newDiv);
    }
    if ($('.dropdown-list-container').css('display') === 'block') {
        console.info("okokoko");
        $('.dropdown-list-container').hide();
    }
})

HTML:

<div class = "col">
                          <div class = "rating-dropdown-container" id = "ratingDropdownContainer">
                            <div class = "rating-dropdown-inner-text">
                              <p>Average Rating...</p>
                              <i class = "bi bi-caret-down-fill"></i>
                            </div>
                          <div class = "dropdown-list-container" id = "dropdownListContainer">
                            <ul class = "rating-dropdown">
                              <li class = "avg-rating-select">
                                <img src = "/media/main/5stars.png" alt = "5stars" class = "avg-rating-select-img">
                                <p class = "avg-rating-select-text">5 Stars & Up</p>
                              </li>
                              <li class = "avg-rating-select">
                                <img src = "/media/main/4stars.png" alt = "4stars" class = "avg-rating-select-img">
                                <p class = "avg-rating-select-text">4 Stars & Up</p>
                              </li>
                              <li class = "avg-rating-select">
                                <img src = "/media/main/3stars.png" alt = "3stars" class = "avg-rating-select-img">
                                <p class = "avg-rating-select-text">3 Stars & Up</p>
                              </li>
                              <li class = "avg-rating-select">
                                <img src = "/media/main/2stars.png" alt = "2stars" class = "avg-rating-select-img">
                                <p class = "avg-rating-select-text">2 Stars & Up</p>
                              </li>
                              <li class = "avg-rating-select">
                                <img src = "/media/main/1stars.png" alt = "1stars" class = "avg-rating-select-img">
                                <p class = "avg-rating-select-text">1 Star & Up</p>
                              </li>
                            </ul>
                          </div>
                        </div>
                    </div>

CSS:

.rating-dropdown-container {
  display: block;
  position: relative;
  width: 100%;
  padding: .375rem .75rem;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  color: #212529;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ced4da;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  border-radius: .375rem;
  transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}

.dropdown-list-container {
    display: none;
    position: absolute;
    z-index: 100;
    border: 1px solid #ced4da;
    border-top:none;
    border-top-left-radius: 0;
    border-top-right-radius: 0;
    border-bottom-left-radius: .375rem;
    border-bottom-right-radius: .375rem;
    width: 100%;
    margin-left:-12px;
    background-color: #fff;
}


.avg-rating-select {
    padding-left: 8px;
    display: flex;
    align-items: center;
    cursor: pointer;
}

(Примечание: это проект Django, который использует загрузочную загрузку, если это помогает)

Поведение ключевого слова "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) для оценки ваших знаний,...
3
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема может быть связана с распространением или делегированием событий. Попробуйте остановить распространение событий при нажатии на параметры в раскрывающемся списке с помощью event.stopPropagation(), так:


$('#ratingDropdownContainer').on('click', function() {
    if ($('.dropdown-list-container').css('display') == 'none') {
        $('.dropdown-list-container').show();
    }
})

$('.avg-rating-select').on('click', function(event) {
    event.stopPropogation(); // change here.
    var selectedRatingImg = $(this).find('img').prop('outerHTML');
    var selectedRatingText = $(this).find('p').prop('outerHTML');

    var newDiv = $("<div>" + selectedRatingImg + selectedRatingText + "</div>");
    newDiv.addClass("rating-selected-container");

    if ($('.rating-selected-container').length) {
        $('.rating-selected-container').replaceWith(newDiv);
    } else {
        $('.rating-dropdown-inner-text p').replaceWith(newDiv);
    }
    if ($('.dropdown-list-container').css('display') === 'block') {
        console.info("okokoko");
        $('.dropdown-list-container').hide();
    }
})

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