我想阻止focusOut
(或blur
)事件的默认事件,并将焦点设置为特定的输入字段。
这是我已经尝试过的:
event.preventDefault()
在函数的开头和结尾使用(用于测试目的,而不是样式)return false;
防止传播直接在元素中将焦点设置回元素(但我发现焦点仍然在切换,因为焦点切换是在函数执行后
.on()
执行的。我知道我可以使用setTimeout
,但我想避免它并弄清楚心脏的问题。)使用
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()
将焦点设置回原始元素,这没关系,但我想了解问题的核心,为什么preventDefault()
是不在这里工作。jQuery preventDefault() 不起作用——我从这个线程尝试了一些可能的解决方案,例如使用
event.stopImmediatePropagation()
andevent.stop()
,但都是徒劳的。
我感谢在此问题上贡献的任何时间、知识和解决方案(包括尝试)。我真的很想学习……</p>
这是一个向您展示问题的 jsFiddle ……请随意使用它并尝试不同的解决方案。