我的目标是确保同一个组件始终具有焦点。该表单有一个输入框和许多按钮。用户将扫描条形码(使用模拟键盘的扫描仪),然后选择一个按钮来激活一个功能。我希望他们能够扫描多个条形码,而无需单击输入框。我有以下 javascript 来完成准备收件箱以进行覆盖的肮脏工作(目前只有当他们将焦点移到收件箱时)。
function SelectAll(id)
{
document.getElementById(id).focus();
document.getElementById(id).select();
}
window.onload = SelectAll('form:scan');
我需要让输入畅通无阻(因此认为它应该只在失去焦点时才返回焦点)。我已经尝试添加功能来聚焦更改和按钮激活事件,但没有成功。确实需要使其页面宽,因为在按钮激活后焦点转到未知的地方。
编辑
在这种情况下,似乎对模糊事件进行焦点更改不起作用。看起来 JSF 的处理程序在执行模糊事件(以及因此的焦点更改请求)之后移动焦点。任何 JSF 专家都知道如何进入 JSF 的处理程序并对其进行调整,而不是尝试使用纯 JavaScript 来完成?
编辑
我是其中的一部分。模糊事件被忽略的原因与在 AJAX 调用期间重新渲染整个表单有关,而不仅仅是单个组件。限制更新范围使其适用于所有组件,除了输入框本身。我需要输入框本身重新渲染,因为它对输入进行了一些验证。如果我禁用它的重新渲染,它将在输入时选择。如果我启用重新渲染,则选择代码会在重新输入验证信息之前运行。当信息重新输入时,选择会丢失(保持焦点,但如果没有选择,我们无法立即再次扫描,需要点击某处)。