Проблема, по-видимому, заключается в том, что переменная el
нигде не была формально объявлена. Использование переменной без ее объявления должно вызвать ошибку и происходит в "строгом режиме", но если вы не включите это (настоятельно рекомендуется), механизм JS будет неявно объявлять любые необъявленные переменные в global scope.
Это может вызвать всевозможные неприятные проблемы, но здесь особой проблемой было просто то, что три функции-обработчика событий «совместно использовали» одну и ту же переменную el
, и поэтому перезаписать его так, как вы заметили.
Принимая во внимание, что если вместо этого вы объявите его как локальную переменную (это сработает так же, как и со старомодным ключевым словом var
, но давайте будем современными), с let el = ...
эта проблема исчезнет. el
воссоздается, указывая на правильный элемент, каждый раз, когда запускается любой из 3 обработчиков событий, и ни один не может влиять на другие.
[Фактически, как указано в других комментариях / ответах, const
здесь лучше, чем let
]