Я хотел бы предотвратить событие по умолчанию из события focusOut
(или blur
) и сохранить фокус в определенном поле ввода.
Это то, что я уже пробовал:
-
с помощью
event.preventDefault()
в начале и в конце функции (для целей тестирования, а не для стиля) -
return false;
, чтобы предотвратить распространение -
настройка фокуса обратно на элемент непосредственно в элементе (но я обнаружил, что фокус все еще переключается, поскольку переключатель фокуса выполняется после выполнения функции
.on()
. Я знаю, что могу использоватьsetTimeout
, но Id хотел бы избежать этого и выяснить суть проблемы.) -
используя
blur
вместоfocusOut
Мой код:
_triggerEventHide: function(inst, eventType) {
inst.$target.on(eventType, function(event) {
event.preventDefault();
if (!$.suggestBox.$divCont.hasClass($.suggestBox.mouseOverClassName)) {
$.suggestBox.$divCont.css({display: 'none'}); //reposition Suggestbox
} else {
inst.target.focus();
}
event.preventDefault();
return false;
});
}
Обратите внимание, что $target
представляет элемент, обернутый jQuery, и target
представляет собственный элемент DOM.
Я провел некоторое исследование и нашел уже несколько статей, касающихся моего вопроса, но ни один из них не ответил на этот точный вопрос.
-
preventDefault не работает в событии фокуса - Здесь приведенный ответ является альтернативным путем использования любых видов манипуляций с событиями.
-
Сфокусируйте заднее текстовое поле на фокусе, если оно не имеет требуемого значения. Здесь решение было использовать
setTimeout()
, чтобы настроить фокус на оригинальный элемент, и все в порядке, но Id нравится понимать суть проблемы, почемуpreventDefault()
здесь не работает. -
jQuery preventDefault() не работает - Я пробовал некоторые возможные решения из этого потока, такие как использование
event.stopImmediatePropagation()
иevent.stop()
, но все для ноль.
Я ценю любое время, знания и решения (включая попытки) в этом вопросе. Мне бы очень хотелось узнать...
Вот jsFiddle, чтобы показать вам проблему... не стесняйтесь играть с ней и попробовать разные решения.