我想在页面加载时将焦点放在JSF中的inputText字段上。我该如何实现呢?
答案 0 :(得分:27)
如果您已经使用HTML5和JSF 2.2,请使用HTML5 autofocus
属性。在JSF 2.2中,您可以将其设置为passthrough attribute。
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autofocus="true" />
您甚至可以有条件地设置它,您只需要确保false
条件的计算结果为null
,否则该属性仍将被渲染。它是一个HTML布尔属性,因此只有它的存在已经是触发器,无论其值如何。当值显式设置为null
时,JSF将不会完整地呈现该属性。
<h:inputText ... a:autofocus="#{component.valid ? null : true}" />
另一种方法是投入一些JavaScript。每个输入元素都有focus()函数。以下天真的Vanilla JS方法着重于第一种形式的第一个元素。
window.onload = function() {
document.forms[0].elements[0].focus();
}
如果要在窗口加载期间聚焦特定的输入元素,请执行以下操作:
window.onload = function() {
document.getElementById('formId:inputId').focus();
}
如果碰巧手头有jQuery,可以进行更精细的检查。
$(document).ready(function() {
$(":input:visible:enabled:first").focus()
});
如果您打算仅在回发后执行它,请转到以下相关问答A:
实用程序/组件库可能具有内置自动对焦功能。 OmniFaces有<o:highlight>
突出显示回发的所有无效输入,并自动注释第一个。默认情况下,PrimeFaces会在完成ajax请求时自动复制“last active”元素,并且<p:focus>
具有更精细的控制权。另见下文相关的Q&amp; A:
答案 1 :(得分:18)
如果你使用primefaces,你可以像这样集中你的输入:
<p:focus for="inputId"/>