2013-03-27 138 views
4

我试图保持焦点的输入元素上使用此代码重点:保持在输入标签

<input onblur="this.focus()" /> 

但它似乎并没有工作。

+4

“它似乎不工作”是一个问题的一个比较差的描述。你能更好地描述不起作用的方面吗?如果你想在那里保持专注,你还会介意解释吗?这没什么意义,因为你不能做任何事情**。 – Oded 2013-03-27 21:57:27

+0

对不起,我的意思是我希望文本光标始终在那里。有没有方法可以点击其他东西,而光标不会消失? – in3D 2013-03-27 22:24:58

+1

为了什么目的?您将无法在其他任何地方点击,因为焦点将返回到控件。 – Oded 2013-03-27 22:25:34

回答

9

如果我们只是在blur事件上调用.focus(),它将恢复焦点,但实际上不会有文本光标。为了处理这个问题,我们必须让元素失去焦点,然后在几毫秒内返回它。我们可以使用setTimeout()

$('#inp').on('blur',function() { 
    var blurEl = $(this); 
    setTimeout(function() { 
     blurEl.focus() 
    }, 10); 
}); 

这是working example。小心 - 你不能离开文本字段后,你输入=)

编辑我用jQuery,但它可以很容易地完成没有它。
EDIT2这里的纯JS版fiddle

<input type="text" id="elemID" /> 

<script type="text/javascript"> 
    document.getElementById('elemID').onblur = function (event) { 
     var blurEl = this; 
     setTimeout(function() { 
      blurEl.focus() 
     }, 10); 
    }; 
</script> 
+1

谢谢,但我也需要能够点击其他的东西。可能吗? – in3D 2013-03-27 22:29:15

+0

是的,这是可能的。你必须记住的唯一一件事,那就是在任何点击之后它都会把注意力集中在输入上。也许你应该编写一些额外的条件来控制焦点失去预防。 – 2013-03-27 22:31:34

+0

你会如何在简单的Javascript中做到这一点?我在jQuery方面没有经验。 – in3D 2013-03-27 22:35:06