Вы можете перехватить событие blur
и снова перефокусировать поле. Существует очень мало вариантов использования для этого, но, похоже, ваш может быть одним из них. Обратите внимание, что вам, вероятно, придется планировать перефокусировку с помощью setTimeout
или подобного, вы не сможете сделать это в самом обработчике blur
.
При этом, не затрагивая разметку, это проще всего, если вы используете библиотеку, такую как Прототип , jQuery , Закрытие и т. Д., Но вы можете делать это без них (конечно), вы просто должны справиться с различиями браузера самостоятельно. Например, используя Prototype:
document.observe("dom:loaded", function() {
var elm = $('thingy');
elm.focus();
elm.observe('blur', function() {
refocus.defer(elm);
});
function refocus(elm) {
elm.focus();
}
});
Если вы не возражаете повлиять на разметку, вы можете использовать атрибут onblur
. Например, это работает по крайней мере в IE, Firefox и Chrome (возможно, в других):
HTML:
<input type='text' id='thingy' onblur="refocus(this);">
Сценарий:
function refocus(elm) {
setTimeout(go, 0);
function go() {
elm.focus();
}
}