如何防止元素失去焦点?

C_M*_*jor 15 javascript jquery

如何将焦点放在一个文本框上?即使你点击浏览器中的任何地方.

$("#txtSearch").focus();
Run Code Online (Sandbox Code Playgroud)

Kon*_*nev 24

您需要订阅blur事件textbox并通过一个小超时恢复焦点:

$('#txtSearch').blur(function (event) {
    setTimeout(function () { $("#txtSearch").focus(); }, 20);
});
Run Code Online (Sandbox Code Playgroud)

这样您就不依赖于订阅页面上任何其他元素的事件.如果您订阅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>
Run Code Online (Sandbox Code Playgroud)

  • 我总是这样解决 - > [**FIDDLE**](http://jsfiddle.net/QhaLY/1/),并发现它更"正确"??? (2认同)

ham*_*y75 5

Konstantin Dinev 的答案在大多数情况下都可以正常工作,但是如果您不想仅在单击 html 的某些部分时才失去焦点,请执行以下操作:

$(".nofocus").on( "mousedown", function (e) {
    return false;
});
Run Code Online (Sandbox Code Playgroud)

就我而言,我正在做一个小的 html 文本编辑器,我不想在按下操作按钮时失去控制权,但在任何其他情况下都是如此。

我只需要在按钮上添加 nofocus 类,它就不会控制


Cur*_*urt 3

$("html").click(function(){
   $("#txtSearch").focus();
});
Run Code Online (Sandbox Code Playgroud)

现场演示: http: //jsfiddle.net/QhaLY/