【发布时间】:2013-04-08 23:14:19
【问题描述】:
如何将焦点保持在一个文本框上?即使您在浏览器中单击任意位置。
$("#txtSearch").focus();
【问题讨论】:
-
我猜很多咖啡不是一个可以接受的答案?你要强制用户按回车提交表单吗?
-
不,他/她会触摸它,因为我正在使用平板电脑
标签: javascript jquery
如何将焦点保持在一个文本框上?即使您在浏览器中单击任意位置。
$("#txtSearch").focus();
【问题讨论】:
标签: javascript jquery
Konstantin Diev 回答在大多数情况下都可以,但如果您不想仅在单击 html 的某些部分时失去焦点,请执行以下操作:
$(".nofocus").on( "mousedown", function (e) {
return false;
});
在我的情况下,我正在做一个小型 html 文本编辑器,我不想在按下操作按钮时失去控制,但在任何其他情况下都可以。
我只需要给按钮添加 nofocus 类,它不会控制
【讨论】:
selectionStart,这就是您所需要的。所有其他答案都描述了如何在失去焦点后立即返回焦点。
e.preventDefault() 以防止失去焦点,return false 似乎什么也没做。 codepen.io/TechnoSam/pen/ZEyxxvy
如果您只需要单击特定元素而不获取焦点,也可以不使用 jQuery 并且不重新聚焦
只需监听 mousedown 事件并取消它
element.addEventListener("mousedown", event => {event.preventDefault(); event.stopPropagation()});
【讨论】:
除了单击远离输入的区域(即制表符)之外,还有其他失去焦点的方法。如果您想防止失去焦点,请使用模糊事件,即
document.getElementById('txtSearch').addEventListener('blur', e => {
e.target.focus();
});
【讨论】:
您需要订阅textbox 的blur 事件,并在小超时后恢复焦点:
$('#txtSearch').blur(function (event) {
setTimeout(function () { $("#txtSearch").focus(); }, 20);
});
这样您就不必依赖订阅页面上任何其他元素的事件。如果您订阅body click 或html click,如果任何其他元素阻止其click 事件的传播,它将不会运行,并且在退出textbox 时它也不会工作。
例子:
<!-- I will not propagate my click to top level DOM elements -->
<button id="button">Click me</button>
<script>
$('#button').click(function (event) {
event.stopPropagation();
});
</script>
【讨论】:
$("#txtSearch").focus() 将立即(同步)应用,然后blur 事件将在树中冒泡,文本区域将失去焦点.
$('body').click(function(){$("#txtSearch").focus();});
【讨论】:
$("html").click(function(){
$("#txtSearch").focus();
});
【讨论】:
#txtSearch2。