Не так принципиально, какой библиотекой мы воспользуемся, когда будем убирать фокус, я привык использовать jQuery. Потому речь пойдет в контексте этой библиотеки.
Сложностей с тем как снять фокус с элемента традиционно больше, чем с тем, как его установить. Связано это прежде всего с названием события — blur. Т.е. не onfocus, не looseFocus и т.п, как можно ожидать.
Выполнить действие можно одной командой, например:
1 |
jQuery('textarea').blur(); |
Т.е. нужно использовать вызов функции blur() без параметров. Вызываются все обработчики, связанные с этим событием.
Если потеря фокуса должна быть отложенной (т.е. через некоторое время), то можно прибегнуть к старому трюку с setTimeout().
Главное не ошибиться с контекстами, вот так работать будет:
1 2 3 4 5 6 7 8 |
var obj = null; jQuery('textarea').on('focus', function() { //... obj = this; setTimeout( function() { jQuery(obj).blur() }, 2000 ); }); |
После получения фокуса, пройдет 2 секунды и textarea потеряет фокус ввода.
А вот так нет:
1 2 3 4 5 6 |
jQuery('textarea').on('focus', function() { //... setTimeout( function() { jQuery(this).blur() }, 2000 ); }); |
Вот так работать будет, но не так как надо:
1 2 3 4 |
jQuery('textarea').on('focus', function() { //... jQuery(this).blur(); }); |
Все обработчики события blur будут вызваны, но мы находится внутри обработчика focus, курсор при этом из textarea не пропадет.