#jquery
#jquery
Вопрос:
Я хочу добавить active
класс только к .element
тому, который получает щелчок.
Проблема в том, что если у меня много элементов с element
классом, все они получат active
класс.
Вот что я пробовал:
$(document).mousedown(function(event) {
if ($(event.target).closest('.element').length) {
$(this).addClass('active');
}
});
Это не работает по причине, которая $(this)
не определена.
Как мне определить, что щелкнул '.element'
$(this)
?
Комментарии:
1. Исправьте местоположение, в котором вы добавляете прослушиватель событий, или используйте то, что у вас уже есть в вашем скрипте:
$(event.target).closest('.element').length
Ответ №1:
Почему бы не установить прослушиватель как
$(document).on('mousedown', '.element', function(event) {
$(this).addClass('active');
})
Что это делает, так это устанавливает в документе один прослушиватель, который прослушивает событие mousedown для всплывающего окна dom. Если и только если событие происходит для объекта с классом, включающим ‘element’, тогда функция сработает. Внутри функции $ (this) — это элемент ‘.element’, поэтому вы можете игнорировать любое дальнейшее тестирование близости. Вы могли бы настроить прослушиватель на ‘.element’, я просто делегировал его в document в качестве общей практики для уменьшения количества слушателей.
И если вы хотите удалить активный класс из текущего ‘.element’, который был нажат, затем измените на
$(document).on('mousedown', '.element', function(event) {
$('.element.active').removeClass('active');
$(this).addClass('active');
})
Попробуйте ниже.
$(document).on('mousedown', '.element', function(event) {
$('.element.active').removeClass('active');
$(this).addClass('active');
})
.active
{ background-color: cyan;
}
.element {
color: magenta;
cursor: pointer;
padding: 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class='element'>Click me!</p>
<p class='element'>Click me!</p>
<p class='element'>Click me!</p>
<p class='element'>Click me!</p>
<p class='element'>Click me!</p>
<p class='element'>Click me!</p>
<p class='element'>Click me!</p>