У меня были проблемы с подходом cletus, использующим jQuery 1.3.2 и Firefox 3.6.8, потому что строка "a == document.activeElement"
не была допустимой функцией.
Я исправил это определение функции для клавиши focus
. Фактически все остальные ключи, определенные в jQuery.expr[':']
, определены как функции. Вот код:
jQuery.extend(jQuery.expr[':'], {
focus: function(e){ return e == document.activeElement; }
});
Итак, теперь все работает как положено.
Однако в Firefox 3.6.8 я столкнулся со странным поведением (может быть, ошибка в FF?). Если бы я щелкнул по вводимому тексту во время рендеринга страницы, и если бы я вызвал is(":focus")
при загрузке страницы, я бы получил сообщение об ошибке из браузера, сообщаемое FireBug, и скрипт сломался бы.
Чтобы решить эту проблему, я окружил код блоком try...catch
, возвращая false
в случае ошибки. Используйте его, если вы хотите, чтобы у ваших пользователей не возникала та же ошибка:
jQuery.extend(jQuery.expr[':'], {
focus: function(e){
try{ return e == document.activeElement; }
catch(err){ return false; }
}
});