Javascript 当HTML表单失去焦点时,如何重新聚焦到文本字段?
HTML表单上只有一个文本字段。用户输入一些文本,按Enter键,提交表单,然后重新加载表单。主要用途是条形码读取。我使用以下代码将焦点设置为文本字段:Javascript 当HTML表单失去焦点时,如何重新聚焦到文本字段?,javascript,setfocus,lost-focus,Javascript,Setfocus,Lost Focus,HTML表单上只有一个文本字段。用户输入一些文本,按Enter键,提交表单,然后重新加载表单。主要用途是条形码读取。我使用以下代码将焦点设置为文本字段: <script language="javascript"> <!-- document.getElementById("#{id}").focus() //--> </script> 它大部分时间都能工作(如果没有人触摸屏幕/鼠标/键盘) 但是,当用户单击浏览器
<script language="javascript">
<!--
document.getElementById("#{id}").focus()
//-->
</script>
它大部分时间都能工作(如果没有人触摸屏幕/鼠标/键盘)
但是,当用户单击浏览器窗口中字段外的某个位置(空白处)时,光标将消失。一个是单字段HTML表单,如何防止光标丢失?或者,在光标丢失后,如何在字段内重新聚焦光标?谢谢 您可以钩住
模糊事件并重新聚焦字段。这样做的用例很少,但听起来你的可能就是其中之一。请注意,您可能必须通过setTimeout
或类似方式安排重新聚焦,您将无法在blur
处理程序本身中执行此操作
在不影响标记的情况下执行此操作时,如果您使用诸如、等库,这是最简单的,但是您可以在不使用它们的情况下执行此操作(当然),您只需要自己处理浏览器差异。例如,使用原型:
document.observe("dom:loaded", function() {
var elm = $('thingy');
elm.focus();
elm.observe('blur', function() {
refocus.defer(elm);
});
function refocus(elm) {
elm.focus();
}
});
如果不介意影响标记,可以使用onblur
属性。例如,这至少适用于IE、Firefox和Chrome(可能还有其他浏览器):
HTML:
达林的答案是正确的,但在Firefox中不起作用。如果你想在Firefox中窃取焦点,你必须将其延迟到事件发生后:
<input onblur="var that= this; setTimeout(function() { that.focus(); }, 0);">
或者,更好的是,从JavaScript分配:
<script type="text/javascript">
var element= document.getElementById('foo');
element.focus();
element.onblur= function() {
setTimeout(function() {
element.focus();
}, 0);
};
</script>
var元素=document.getElementById('foo');
元素focus();
element.onblur=function(){
setTimeout(函数(){
元素focus();
}, 0);
};
但是,我强烈建议您不要这样做。在文本框外单击以从该文本框中移除焦点是完全正常的浏览器行为,这可能具有合法用途(例如,设置ctrl-F的搜索点,或启动拖动选择等)。不太可能有很好的理由来扰乱这种预期行为。至少在Firefox或Chrome上不起作用;焦点通话需要推迟。
<input type="text" name="barcode" onblur="this.focus();" />
<input onblur="var that= this; setTimeout(function() { that.focus(); }, 0);">
<script type="text/javascript">
var element= document.getElementById('foo');
element.focus();
element.onblur= function() {
setTimeout(function() {
element.focus();
}, 0);
};
</script>