Имитация нажатия клавиш с помощью JavaScript

Для полноты, теперь есть fct_drop в пакете forcats http://forcats.tidyverse.org/reference/fct_drop.html .

Он отличается от droplevels тем, как он имеет дело с NA:

f <- factor(c("a", "b", NA), exclude = NULL)

droplevels(f)
# [1] a    b    
# Levels: a b 

forcats::fct_drop(f)
# [1] a    b    
# Levels: a b

21
задан Community 23 May 2017 в 10:28
поделиться

4 ответа

Решение, к которому я пришел, - это создать div "focus stealer" (с tabindex = -1 - может иметь фокус, но не может быть включен изначально) с любой стороны области, в которой я хочу вручную управлять фокусом. Затем я помещаю прослушиватель событий с пузырьками, чтобы сфокусироваться и размыть всю область. Когда какой-либо фокус происходит в области, значения tabindex изменяются на -1, а когда происходит какое-либо размытие, они меняются на 0. Это означает, что, пока фокус находится в области, вы можете табуляцией или сдвигом табуляции выйти из нее и правильно заканчиваются на других элементах страницы или элементах пользовательского интерфейса браузера, но как только вы фокусируетесь оттуда, средства для похищения фокуса становятся вкладками, и при фокусе они правильно настраивают ручную область и переключают фокус на элемент на их конце, как если бы вы нажали один или другой конец ручной области.

4
ответ дан 29 November 2019 в 22:12
поделиться

На самом деле я предполагаю, что существует путь, даже если это - главный ЛАВАШ. Я могу удостовериться, что каждый элемент, даже если естественно позиция табуляции, имеет Xtabindex, так или иначе в надлежащем порядке даже при том, что я буду заглядывать виджетам других людей и таким образом с помощью jQuery для добавления их после факта, а не способности указать его прямо в HTML или других первоначальных строительных нормах и правилах. Затем моя вся форма будет иметь реальный tabindex. В то время как это имеет фокус, это поглотит нажатия клавиш, и если они - вкладка или shift+tab, переместите поддельный фокус на основе Xtabindex. Если вкладка будет нажата на последнем (или shift+tab на первом) элемент в форме, то это не пожрет нажатие клавиши, таким образом позволяя браузеру правильно сфокусировать на другой странице или браузере элементы UI вне формы с помощью клавиатуры.

Я могу только предположить, какие виды непреднамеренных побочных эффектов этот подход представит.

На самом деле это даже не решение, потому что я все еще не могу фальсифицировать вкладку на последнем элементе с помощью него.

1
ответ дан 29 November 2019 в 22:12
поделиться

Это решение, которое я использовал в нашем веб-приложении для двух настраиваемых элементов управления, всплывающего календаря и всплывающего селектора веса единиц / значений (при нажатии на текстовое поле появляется div с двумя выбирает)

function tab_focus(elem)
  var fields = elem.form.getElements()
  for(var i=0;i<fields.length;i++) {
    if(fields[i].id == elem.id){
      for(i=i+1;i<fields.length;i++){
        if(fields[i].type != 'hidden'){
          fields[i].focus()
          return    
        }
      }
      break;
    }
  }
  elem.form.focusFirstElement();
}

Используется структура Prototype и ожидает расширенный элемент (например, $ ('thing_id')) в качестве параметра.

Он получает форму, к которой принадлежит элемент, и просматривает элементы формы до тех пор, пока он находит себя.

Затем он ищет первый элемент после него, который не скрыт, и передает ему фокус.

Если после него в форме нет элементов, фокус перемещается обратно на первый элемент в форме. Вместо этого я мог бы найти следующую форму на странице через document.forms, но на большинстве наших страниц используется одна форма.

3
ответ дан 29 November 2019 в 22:12
поделиться

Я думаю, что эти ошибки вызваны автозаполнением. Вы можете отключить их, установив перед отправкой события для атрибута автозаполнения значение 'off'

setAttribute('autocomplete','off')
0
ответ дан 29 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: