Некоторые ответы здесь предлагают использовать, setTimeoutчтобы задержать процесс фокусировки на целевом элементе. Один из них упоминает, что цель находится внутри модального диалога. Я не могу комментировать дальше о правильностиsetTimeout решения, не зная конкретных деталей того, где оно было использовано. Тем не менее, я подумал, что должен дать здесь ответ, чтобы выручить людей, которые сталкиваются с этой веткой, как и я
Простой факт в том, что вы не можете сосредоточиться на элементе, который еще не виден . Если вы столкнулись с этой проблемой, убедитесь, что цель действительно видна при попытке сфокусироваться на ней. В моем собственном случае я делал что-то подобное
$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();
Это не сработало. Я только понял , что происходит , когда я выполнил $ ( «# elementid»). Фокус () `из консоли , который сделал работу. Разница в том, что в моем коде над целью нет уверенности, что цель будет видимой, поскольку анимация может быть не завершена . И здесь кроется ключ
$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});
function focusFunction(){$('#elementid').focus();}
работает так, как ожидалось. Я тоже изначально положил в setTimeoutрешение, и это тоже сработало. Однако произвольно выбранный тайм-аут неизбежно рано или поздно нарушит решение, в зависимости от того, насколько медленно ведущее устройство выполняет процесс, обеспечивающий видимость целевого элемента.