将焦点设置为 JSF 的更改值侦听器之后的下一个输入元素
set focus to next input element after jsf's change value listener
在我们的一个前端屏幕中,我们有以下布局,如下所示
<h:outputLabel for="firstName" value="first name" />
<h:inputText styleClass="required" id="firstName" size="30" maxlength="30"
value="#{ownershipStoreInfoController.form.ownerFirstName}" onchange="submit()"
valueChangeListener="#{ownershipStoreInfoController.useOwnerInfo}">
<e:validateRegExpr pattern="([A-Z,a-z,0-9,%@()#&,.;:_'$'/'-'{'}'[']''''s*]{1,30})?" />
</h:inputText>
<h:outputLabel for="lastName" value="last name" />
<h:inputText styleClass="required" size="30" id="lastName" maxlength="30"
value="#ownershipStoreInfoController.form.ownerLastName}"
onchange="submit()"
valueChangeListener="#{ownershipStoreInfoController.useOwnerInfo}">
<e:validateRegExpr pattern="([A-Z,a-z,0-9,%@()#&,.;:_'$'/'-'{'}'[']''''s*]{1,30})?" />
</h:inputText>
当我在输入字段"firsName"中输入值并输入"Tab"时,更改侦听器被调用,一切看起来都很好。
但问题是因为它进行服务器调用并返回屏幕。 光标对下一个输入框("姓氏")的焦点不起作用,焦点也消失在名字字段上。 它工作的唯一方法是我手动将鼠标放在下一个字段中。
我需要焦点才能进入字段("姓氏")。 在我更改"名字"中的值并单击选项卡按钮后。
任何帮助不胜感激。
终于我找到了解决方案。 在我的值变化侦听器中。 我在最后添加了这句话。
if(event.getComponent().getId().equalsIgnoreCase("COMPONENT ID FIRST")){
String jsStatement = "document.getElementById(''" + ("COMPONENT ID SECOND")+ "'').focus();";
SESSIONCLASS.setBodyOnload(jsStatement);
}
在上面的代码中,"组件 ID 优先"是触发值更改侦听器的当前组件,"组件 ID 第二"是必须设置焦点的下一个组件。
SESSIONCLASS是 session 中可用的类,"setbodyonload" 是一个接受字符串作为参数的字符串。 确保你在 SESSIONCLASS 中有如下 getter 和 setter 方法。
public String getBodyOnload() {
return bodyOnload;
}
public void setBodyOnload(String bodyOnload) {
this.bodyOnload = bodyOnload;
}
最后,我在我的 JSP 页面中放了一个 scriplet,如下所示。
<%
String bodyAttributes = "";
String onload = SESSIONCLASS.getBodyOnload();
if (onload != null)
{
bodyAttributes = " onload='""+onload+"'"";
SESSIONCLASS.setBodyOnload(null); // clear bodyOnload
}
%>
所以这里当页面加载后更改值侦听器。 执行 scriplet 让焦点放在所需的组件上。
相关文章:
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- jQuery将侦听器的大小调整为只触发宽度的变化
- 如何在侦听器之后添加可拖动功能
- AngularJS:在.post()之后添加事件侦听器
- 如何在 angularjs 中的简单获取请求 json 之后添加事件侦听器
- 什么是",真正的);“在事件侦听器之后执行
- 在调用f:ajax侦听器之前和之后执行JavaScript
- 当我在Parse中使用Events时,在调用带有事件的触发器之后,不会执行侦听器回调
- 将焦点设置为 JSF 的更改值侦听器之后的下一个输入元素