Изменение Фокуса JavaScript в onClick событии?

Используйте функцию strcat для добавления с использованием однострочного кода без использования цикла:

A={'food','banana','orange'}

A = «еда» «банан» «апельсин»

A = strcat(A,'s')

A = «продукты», «бананы», «апельсины»

,
6
задан Brian Tompsett - 汤莱恩 21 July 2019 в 18:16
поделиться

4 ответа

Вот функция, которая наконец сработала

function focus_on_lightbox(seconds) {
  var seconds_waited
  seconds_waited = seconds
  document.getElementById(lightbox_content_id).focus(); 
  seconds_waited += 100;

  if (document.getElementById(lightbox_content_id) != document.activeElement && seconds_waited < 2000)
    setTimeout("focus_on_lightbox(" + seconds_waited + ");", 100);
  {
  }
}

Так почему же console.log, похоже, повлияла на установку фокуса? Раньше я использовал эту функцию для паузы между попытками изменения фокуса.

function pause(milliseconds) {
    var dt = new Date();
    while ((new Date()) - dt <= milliseconds) { /* Do nothing */ }
}

Это заставляет javascript постоянно что-то делать, и я думаю, что это не давало документу времени на рендеринг или обновление или что-то в этом роде. Кажется, что console.log снял эту блокировку и дал странице возможность сменить фокус.

Когда я изменил подходы к использованию тайм-аута для паузы между попытками, console.log больше не нужен!

4
ответ дан 10 December 2019 в 02:52
поделиться

Я думаю, ваша проблема заключается в вызове метода фокуса после возврата false. ваш код должен быть таким:

<a href="#" 
    onclick="show_lightbox();focus_on_lightbox();return false;">
    show lightbox
</a>
4
ответ дан 10 December 2019 в 02:52
поделиться

По моему опыту, проблемы с фокусом иногда могут быть связаны со временем (например, focus () выполняется до того, как элемент будет полностью готов для фокусировки). Я предполагаю, что разметка лайтбокса создается динамически при вызове функции show_lightbox? В этом случае вы можете попробовать добавить небольшую задержку, прежде чем пытаться сфокусироваться, чтобы увидеть, проблема ли в этом, например:

setTimeout("focus_on_lightbox();", 10);
1
ответ дан 10 December 2019 в 02:52
поделиться

Сделайте сам элемент фокусом. В событии загрузки элемента установите тайм-аут в несколько мс и затем вызовите this.focus ();

Или попробуйте jQuery.

0
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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