我正在尝试根据验证决策来实现选择(并聚焦)组件。
例如:
- 登录表单(2 个输入:用户名、密码;1 个提交按钮)
- 如果验证失败
username
,<h:inputText id="name">
将被关注 - 如果验证失败
password
,<h:inputSecret id="password">
将被关注 - 页面不会刷新,提交是一个ajax按钮
我试过的:
没有ajax 调用(这工作正常-componentId
在验证过程中的 bean 中设置,并在每次页面刷新/提交后选择/聚焦):
$(document).ready(function() {
document.getElementById('form:#{bean.componentId}').focus();
document.getElementById('form:#{bean.componentId}').select();
});
...
<h:commandButton id="save" action="#{bean.save}" type="submit"/>
但是使用ajax调用:
function myFunc(data) {
if (data.status == "success") {
var element = document.getElementById('form:#{bean.componentId}');
element.focus();
element.select();
}}
...
<h:commandButton id="save" action="#{bean.save}" type="submit">
<f:ajax execute="@form" render="@form" onevent="myFunc"/>
</h:commandButton>
这种方式也行得通,问题是,componentId
仍然是一样的(在 bean 创建期间被初始化的那个)。
与此主题相关的先前问题:
如何使用 ajax 提交按钮并选择/聚焦到验证错误的字段???