В JavaScript выберите элемент, охватывающий все элементы, которые вы хотите щелкнуть. Хорошим кандидатом для этого может быть элемент <table>
или, может быть, элемент .calendarCont
.
Причина выбора элемента-оболочки - для делегирования событий, что означает, что все события, которые запускаются внутри элемента-оболочки также будет срабатывать на самом элементе упаковки. Таким образом, вам нужно будет добавить только один прослушиватель событий для всех элементов. Хотя это потребует некоторой проверки, когда пользователь щелкает.
Добавьте прослушиватель событий с addEventListener
к элементу таблицы и прослушивайте событие 'click'
. Напишите функцию, которая будет обрабатывать щелчок, как у вас уже есть.
Поскольку теперь можно щелкнуть каждый элемент внутри элемента <table>
, чтобы вызвать щелчок, вы захотите проверить, какой элемент был нажат. Каждое инициированное событие имеет объект Event
с информацией о событии, которую можно прочитать из обработчика событий (функция обратного вызова).
Свойство event.target
- это элемент, который вызвал событие щелчка. Оценивая, является ли цель тем элементом, который вы ищете, вы можете еще лучше контролировать свое событие. Например, в вашем случае показывать innerHTML
только тогда, когда элементом является <td>
. В противном случае ничего не делайте.
const table = document.querySelector('table');
function onTableClick(event) {
const isCell = event.target.tagName.toLowerCase() === 'td';
if (isCell) {
console.log(event.target.innerHTML);
}
}
table.addEventListener('click', onTableClick);
<div class="calendarCont">
<table>
<tr>
<td>Jan</td>
<td>Feb</td>
<td>Mar</td>
<td>Apr</td>
</tr>
<tr>
<td>May</td>
<td>Jun</td>
<td>Jul</td>
<td>Aug</td>
</tr>
</table>
</div>