JawsIk
@JawsIk
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)

Неужели до сих пор нет возможности вернуть событие focus (при его потери) в FireFox?

Всем доброго здоровичка!
Заказчик поставил задачу. Вот есть у них сайт. В одном моменте нужно проверить, чтобы размеры были верны, и если они не верны, то выдать сообщение и вернуть focus обратно на поле ввода (с выделением того, что ввели).
Код написан при помощи jquery и прекрасно отрабатывает во всех (кроме FireFox) браузерах.
И вот заказчик ставит задачу устранить этот недостаток именно в FireFox.
Бьюсь с этим простецким кодом уже 1.5 часа и не могу победить.
Уже даже в Linux попробовал, а всё-равно в FireFox не работает.
В общем Нужна помощь.

Чтобы проверить, попробуйте в первом поле ввести значение например 200 и нажать кнопку TAB



... тыкните на вкладку с JS (а то я раньше не знал :)

p.s. или может другое решение можете предложить?
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
JawsIk
@JawsIk Автор вопроса
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)
Короче порешал. Нашёл засаду в коде, а теперь по порядку.

1. Обманка через setTimeout действительно работает. Т.е. код:
setTimeout(function() {
  $('.element').focus();
  $('.element').select();
  }, 0);
действительно рабочая обманка

2. Но!
в моём случае полный код был такой:
$order.on('focusout', '.order-item-h', function () {
    ...
    setTimeout(function() {
      $(this).focus();
      $(this).select();
    }, 0);
    ...
});
и здесь я попадаю на долбаное "замыкание".
Т.е. объект $(this) во внутренней функции setTimeout становиться undefined и код соответственно не отрабатывает.

3. Чтобы исправить ситуацию, кладу $(this) в переменную и тогда всё срабатывает одинаково хорошо во всех браузерах (и в FireFox в том числе):
$order.on('focusout', '.order-item-h', function () {
    ...
    $thi = $(this);
    setTimeout(function() {
      $($thi).focus();
      $($thi).select();
    }, 0);
    ...
});

Ура!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanovskiy
@Sanovskiy
Веб-разработчик с 2005 года
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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