Короче порешал. Нашёл засаду в коде, а теперь по порядку.
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);
...
});
Ура!