如何保持焦点在一个文本框上?即使你在浏览器的任何地方单击。
$("#txtSearch").focus();
$("#txtSearch").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
事件将会冒泡到树上,文本区域将失去焦点。 - LeGECKonstantin Dinev的回答在大多数情况下都可以正常工作,但如果您不想在单击html的某些部分时失去焦点,只需执行以下操作:
$(".nofocus").on( "mousedown", function (e) {
return false;
});
selectionStart
,那么这就是您需要的。所有其他答案都描述了如何在失去焦点后立即返回焦点。 - noamyge.preventDefault()
来防止失去焦点,return false
似乎没有任何作用。https://codepen.io/TechnoSam/pen/ZEyxxvy - TechnoSam$("html").click(function(){
$("#txtSearch").focus();
});
Live Demo: http://jsfiddle.net/QhaLY/
#txtSearch2
中键入。 - h2ooooooo如果你只需要点击特定元素时不抓取焦点,而且不使用jQuery和重新聚焦也是可能的。
只需监听mousedown事件并取消它即可。
element.addEventListener("mousedown", event => {event.preventDefault(); event.stopPropagation()});
$('body').click(function(){$("#txtSearch").focus();});
我使用 onMouseDown={e => e.preventDefault()}
,它可以很好地工作。
除了点击输入框以外,还有其他失去焦点的方式,比如按Tab键。如果你想防止失去焦点,可以使用blur事件。
document.getElementById('txtSearch').addEventListener('blur', e => {
e.target.focus();
});