Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Отмена event.preventDefault(); на событии (https://javascript.ru/forum/dom-window/74555-otmena-event-preventdefault-%3B-na-sobytii.html)

s24344 20.07.2018 14:24

Отмена event.preventDefault(); на событии
 
Ребята, подскажите, пожалуйста, как мне решить следующую задачу:

У меня есть следующая функция, в которой используется event.preventDefault(), но при опреденном условии мне необходимо удалить event.preventDefault() и вернуть действие по умолчанию.
То, что есть сейчас:
document.addEventListener('keydown', function(event) {
  if (event.keyCode == 9) {
    event.preventDefault();
  }
});

То, что, я примерно хотел бы получить:
document.addEventListener('keydown', function(event) {
  let flag = true;

  if (flag) {
    event.preventDefault();
  } else {
    // отмена event.preventDefault();
  }
});

Dilettante_Pro 20.07.2018 14:40

s24344,
Ведь можно назначать обработчик и, соответственно, event.preventDefault() не на document, а только на нужный блок.
Вы что, вернулись к этой технологии? А как насчет focus + tabindex?

s24344 20.07.2018 14:46

focus + tabindex. Возникла в дальнейшем проблема, я менял программно tabindex у лементов с помощью setAttribute('tabindex', '1') (например). И обнаружил, что в firefox, ie. Программно tabindex не устанавливается. В любом случае Вам спасибо за помощь.

Белый шум 20.07.2018 15:06

preventDefault() не нужно отменять. Если он не вызвался в данном вызове ф-ии, то предотвращения дефолтного действия не произойдёт.

Dilettante_Pro 20.07.2018 15:39

Цитата:

Сообщение от s24344
обнаружил, что в firefox, ie. Программно tabindex не устанавливается.

Устанавливается. Там была другая проблема. Посмотрите этот вариант

s24344 20.07.2018 15:42

Спасибо.

s24344 21.07.2018 13:34

Всё же решил более подробно описать задачу. И попросить вашей помощи:
#app

  a.some-links link
  a.some-links link

  ul.list
    li.list__item
      a(href="#" data-nav-id="_1").list__link First

    li.list__item
      a(href="#" data-nav-id="_2").list__link Second

    li.list__item
      a(href="#" data-nav-id="_3").list__link Third

  ul.nav
    li(data-nav-id="_1").nav__item
      a(href="#").nav__link first

      .nav__popup
        ul.nav__popup-list
          li.nav__popup-item
            a(href="#").nav__popup-link first 1
          li.nav__popup-item
            a(href="#").nav__popup-link first 2

    li(data-nav-id="_2").nav__item
      a(href="#").nav__link second

      .nav__popup
        ul.nav__popup-list
          li.nav__popup-item
            a(href="#").nav__popup-link second 1

    li(data-nav-id="_3").nav__item
      a(href="#").nav__link Third

      .nav__popup
        ul.nav__popup-list
          li.nav__popup-item
            a(href="#").nav__popup-link third 1

  a(href="#").nav-pane pane

  a.some-links link
  a.some-links link


Должно работать как данном примере: http://www.kentfa.com/

При первом нажатии на tab, первый элемент a или button принимает focus, после чего в default порядке происходит смена focus, но когда focus принимает .list__link, далее при нажатии на клавишу tab, focus переходит на .nav-pane(без фокуса он скрыт). Далее мы нажимаем на enter (space), фактически это событие click, и появляется .nav__item (с соответствуещей привязкой по data атрибутам), далее мы при нажатии на tab также меняем фокус по default порядку. Когда же будет последний элемент .list__item, мы в последний раз перейдем на .nav__popup, и далее вниз по a (button). И также важно, что default навигация, смена focus, при shift + tab, также корректно работает.


Часовой пояс GMT +3, время: 01:22.