@Black_Fire

Как снять обработчики методом off() в jQuery?

На инпут повешено два обработчика для чтения итогового содержимого и посимвольной валидации.
let tel;
$("#tel")
    .on("change", function (e) {
      tel = e.target.value;
      return tel;
    })
    .on("input", function (e) {
      e.target.value.replace(/[\s\-]/g, "");
      if (
        e.target.value.match(
          /^((\+?3)?8)?((0\(\d{2}\)?)|(\(0\d{2}\))|(0\d{2}))\d{7}$/
        ) != null
      ) {
        $(".captcha-overlay, .captcha-alert").hide("fast");
      } else {
        $(".captcha-overlay, .captcha-alert").show("fast");
      }
    });

Дальше, в зависимости от определённых условий, у этого же инпута должен поменяться набор атрибутов. И нужно, чтобы убрались обработчики, установленные на этом элементе, когда были ещё другие атрибуты. Метод off(), в данном случае, не срабатывает, они всё ещё весят на инпуте с новым набором атрибутов
$("input:not(#try)").show("fast").val("").attr({
          id: "flashcall-code",
          name: "flashcall-code",
          placeholder: "[%t:4 цифры входящего:t%]",
          onfocus: "hideError()",
        }).off("change input");
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
естественно не работает если вещать события на $("#tel") и пытаться их отключить у совсем другого элемента $("input:not(#try)").
лучше вешать обработчики событий на класс(ы) - $('form').on('...', '.input', function (e) {}), тогда можно их добавить/удалить и тем самым изменить поведение элементов
Ответ написан
Ваш ответ на вопрос

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

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