Во-первых, я изменил onload
для привязки с jQuery, поэтому вся ваша логика - это привязки jQuery, а не переключение между jQuery и vanilla javascript.Кроме того, выполнение действительной привязки удаляет встроенную привязку.
Затем привязка была сжата в один прослушиватель события делегата.Поскольку в ваших комментариях вы указали, что он не работает для активного элемента после перемещения или добавления активного элемента, это свидетельствует о том, что вы имеете дело с динамическими элементами.Прослушиватели событий делегата - один из способов справиться с такими вещами.
Прослушиватели события делегата связываются с родительским элементом элементов, которые будут изменены или будут созданы.Затем он ожидает события, которое произойдет с одним из его детей.Когда он получает событие, которое он ожидает, он проверяет, соответствует ли элемент, из которого он возник, дочернему селектору (второму аргументу) для слушателя.Если он совпадает, он затем обработает событие для дочернего элемента.
Наконец, я добавил несколько кнопок для обмена активным классом, чтобы вы могли видеть в фрагменте, что обработчик событий начнет работать длялюбой элемент, который вы делаете активным, независимо от того, начинаете ли вы таким образом.
$(window).on('load', function () {
function greatFunction (elem) {
console.log(elem.value);
}
$(document.body).on(
'focus change mousedown mouseout keyup mouseup',
'.cl.active .chatTextarea',
function () {
greatFunction(this);
}
);
$('.makeActive').on('click', function () {
$('.active').removeClass('active');
$(this).closest('div').addClass('active');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="cl1" class="cl active"><textarea class="chatTextarea">aa</textarea><button class="makeActive">Make Active</button></div>
<div id="cl2" class="cl"><textarea class="chatTextarea">bb</textarea><button class="makeActive">Make Active</button></div>
<div id="cl3" class="cl"><textarea class="chatTextarea">cc</textarea><button class="makeActive">Make Active</button></div>