Для полноты, теперь есть 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
Решение, к которому я пришел, - это создать div "focus stealer" (с tabindex = -1 - может иметь фокус, но не может быть включен изначально) с любой стороны области, в которой я хочу вручную управлять фокусом. Затем я помещаю прослушиватель событий с пузырьками, чтобы сфокусироваться и размыть всю область. Когда какой-либо фокус происходит в области, значения tabindex изменяются на -1, а когда происходит какое-либо размытие, они меняются на 0. Это означает, что, пока фокус находится в области, вы можете табуляцией или сдвигом табуляции выйти из нее и правильно заканчиваются на других элементах страницы или элементах пользовательского интерфейса браузера, но как только вы фокусируетесь оттуда, средства для похищения фокуса становятся вкладками, и при фокусе они правильно настраивают ручную область и переключают фокус на элемент на их конце, как если бы вы нажали один или другой конец ручной области.
На самом деле я предполагаю, что существует путь, даже если это - главный ЛАВАШ. Я могу удостовериться, что каждый элемент, даже если естественно позиция табуляции, имеет Xtabindex, так или иначе в надлежащем порядке даже при том, что я буду заглядывать виджетам других людей и таким образом с помощью jQuery для добавления их после факта, а не способности указать его прямо в HTML или других первоначальных строительных нормах и правилах. Затем моя вся форма будет иметь реальный tabindex. В то время как это имеет фокус, это поглотит нажатия клавиш, и если они - вкладка или shift+tab, переместите поддельный фокус на основе Xtabindex. Если вкладка будет нажата на последнем (или shift+tab на первом) элемент в форме, то это не пожрет нажатие клавиши, таким образом позволяя браузеру правильно сфокусировать на другой странице или браузере элементы UI вне формы с помощью клавиатуры.
Я могу только предположить, какие виды непреднамеренных побочных эффектов этот подход представит.
На самом деле это даже не решение, потому что я все еще не могу фальсифицировать вкладку на последнем элементе с помощью него.
Это решение, которое я использовал в нашем веб-приложении для двух настраиваемых элементов управления, всплывающего календаря и всплывающего селектора веса единиц / значений (при нажатии на текстовое поле появляется 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, но на большинстве наших страниц используется одна форма.
Я думаю, что эти ошибки вызваны автозаполнением. Вы можете отключить их, установив перед отправкой события для атрибута автозаполнения значение 'off'
setAttribute('autocomplete','off')