HTML表单上只有一个文本字段。用户输入一些文本,按Enter键,提交表单,然后重新加载表单。主要用途是条形码阅读。我使用以下代码将焦点设置为文本字段:
<script language="javascript">
<!--
document.getElementById("#{id}").focus()
//-->
</script>
大部分时间都可以使用(如果没有人触摸屏幕/鼠标/键盘)。
但是,当用户在浏览器窗口(白色空白区域)内的某个字段外单击时,光标就消失了。一个单一的字段HTML表单,如何防止光标丢失?或者,如何在光标丢失后将光标重新聚焦在字段内? THX!
答案 0 :(得分:8)
<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>
但是,我强烈建议你不要这样做。单击文本框外部以从该文本框中删除焦点是完全正常的浏览器行为,这可以是合法使用的(例如,为ctrl-F设置搜索点,或者开始拖动选择等)。不太可能有理由搞乱这种预期的行为。
答案 1 :(得分:2)
<input type="text" name="barcode" onblur="this.focus();" />
答案 2 :(得分:1)
您可以挂钩blur
事件并重新重新聚焦该字段。这样做的用例很少,但听起来你的可能就是其中之一。请注意,您可能必须通过setTimeout
或类似方式安排重新聚焦,您将无法在blur
处理程序本身内执行此操作。
在不影响标记的情况下执行此操作时,如果您使用Prototype,jQuery,Closure等库,这是最简单的,但您可以在没有它们的情况下执行此操作(当然),你只需要自己处理浏览器差异。例如,使用Prototype:
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:
<input type='text' id='thingy' onblur="refocus(this);">
脚本:
function refocus(elm) {
setTimeout(go, 0);
function go() {
elm.focus();
}
}