Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.07.2018, 14:24
Профессор
Отправить личное сообщение для s24344 Посмотреть профиль Найти все сообщения от s24344
 
Регистрация: 12.08.2015
Сообщений: 206

Отмена 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();
  }
});
Ответить с цитированием
  #2 (permalink)  
Старый 20.07.2018, 14:40
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

s24344,
Ведь можно назначать обработчик и, соответственно, event.preventDefault() не на document, а только на нужный блок.
Вы что, вернулись к этой технологии? А как насчет focus + tabindex?
Ответить с цитированием
  #3 (permalink)  
Старый 20.07.2018, 14:46
Профессор
Отправить личное сообщение для s24344 Посмотреть профиль Найти все сообщения от s24344
 
Регистрация: 12.08.2015
Сообщений: 206

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

Последний раз редактировалось s24344, 20.07.2018 в 14:51.
Ответить с цитированием
  #4 (permalink)  
Старый 20.07.2018, 15:06
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

preventDefault() не нужно отменять. Если он не вызвался в данном вызове ф-ии, то предотвращения дефолтного действия не произойдёт.
Ответить с цитированием
  #5 (permalink)  
Старый 20.07.2018, 15:39
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от s24344
обнаружил, что в firefox, ie. Программно tabindex не устанавливается.
Устанавливается. Там была другая проблема. Посмотрите этот вариант
Ответить с цитированием
  #6 (permalink)  
Старый 20.07.2018, 15:42
Профессор
Отправить личное сообщение для s24344 Посмотреть профиль Найти все сообщения от s24344
 
Регистрация: 12.08.2015
Сообщений: 206

Спасибо.
Ответить с цитированием
  #7 (permalink)  
Старый 21.07.2018, 13:34
Профессор
Отправить личное сообщение для s24344 Посмотреть профиль Найти все сообщения от s24344
 
Регистрация: 12.08.2015
Сообщений: 206

Всё же решил более подробно описать задачу. И попросить вашей помощи:
#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, также корректно работает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кнопка отмена предыдущего действия другой кнопки Fisher_OK jQuery 4 12.05.2018 00:43
Отмена выделенного элемента iosweb Элементы интерфейса 2 12.02.2016 22:00
Очистка памяти, отмена загрузки картинки, отмена события. zhurchik Общие вопросы Javascript 16 23.10.2014 13:48
Загрузка браузером новой страницы при событии. JQUERY AlexM jQuery 1 15.10.2012 11:10
не сохраняется значение переменной при событии cyberpunk Events/DOM/Window 2 21.09.2012 09:59