如何防止元素失去焦点?

时间:2013-04-16 13:50:16

标签: javascript jquery

如何将焦点放在一个文本框上?即使您点击浏览器中的任何位置。

$("#txtSearch").focus();

6 个答案:

答案 0 :(得分:22)

您需要订阅blur的{​​{1}}事件并通过一小段时间恢复焦点:

textbox

这样您就不会依赖订阅页面上任何其他元素的事件。如果您订阅了$('#txtSearch').blur(function (event) { setTimeout(function () { $("#txtSearch").focus(); }, 20); }); body click,那么如果其他任何元素阻止其html click事件的传播,它将无法运行,当{{1}标签显示时,它也无效}}

示例:

click

答案 1 :(得分:3)

$("html").click(function(){
   $("#txtSearch").focus();
});

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

答案 2 :(得分:1)

$('body').click(function(){$("#txtSearch").focus();});

答案 3 :(得分:1)

除了点击远离输入的区域(即标签)之外,还有其他方法可以失去焦点。如果你想防止失去焦点,请使用模糊事件,即



document.getElementById('txtSearch').addEventListener('blur', e => {
  e.target.focus();
});




答案 4 :(得分:0)

康斯坦丁·迪涅夫(Konstantin Dinev)答案在某些情况下可以正常工作,但是如果您不想仅在单击html的某些部分时就失去焦点,只需执行以下操作:

$(".nofocus").on( "mousedown", function (e) {
    return false;
});

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

我只需要在按钮上添加nofocus类,它将不会获得控制权

答案 5 :(得分:0)

在没有jQuery且没有重新聚焦的情况下也是可能的

只需监听mousedown事件并将其取消

element.addEventListener("mousedown", event => {event.preventDefault(); event.stopPropagation()});