@Bembolat

Как на js передать метод evt.preventDefault() в функцию с другими параметрами?

Весь код есть в песочнице
нужно создать универсальную функцию для всплывающих элементов на сайте, которая в зависимости от условий будет добавлять или удалять класс. перед добавлением класса эта функция должна сбрасывать действия по умолчанию, поэтому нужен evt.preventDefault().
var gathering = function (object, selector) {
  for (var i = 0; i < object.length; i++) {
    if (object[i].classList.contains(selector)) {
    object[i].classList.remove(selector);
  } else {
    object[i].classList.add(selector);
  }
  }
  }
  • Вопрос задан
  • 449 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Универсальная функция не должна ничего знать про события.

События нужно отменять в обработчиках. Если ваша функция и есть обработчик, в неё первым аргументом придёт объект события и вы сможете сделать что нужно. Если ваша функция вызывается внутри обработчика, то там и отменяйте действие по-умолчанию (aka см. пункт 1).

Чисто теоретически, можно закостылить - если ваша функция вызывается из обработчика, то в её области видимости есть-таки переменная с объектом события (если этот аргумент объявлен в обработчике) и можно перебирать часто используемые имена переменной (e, evt, event) и пытаться вызывать на них preventDefault() или вот так.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
groog
@groog
Я только учусь
Ну так и пишите в обработчике события
evt.preventDefault()

Да и ваш код можно заменить на:
function(object, selector){
    Object.values(object).map( item => item.classList.toggle(selector) )
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы