在提交表单(ajax调用)后,我正在尝试选择并关注选择的组件ID。
<script>
var myFunc = function() {
document.getElementById('form:#{bean.componentId}').focus();
document.getElementById('form:#{bean.componentId}').select();
};
$(document).ready(function() {
myFunc();
});
</script>
<h:form id="form">
<h:commandButton action="#{bean.save}" onclick="return myFunc();" ...>
<f:ajax execute="@form" render="@form"/>
</h:commandButton>
...
</h:form>
此解决方案正在运行,但问题是,<f:ajax>
被称为AFTER onclick
,因此在选择组件后呈现表单,并清除焦点。
如何在表单呈现后调用我的函数?
更新(我已尝试过)
onevent="myFunc();"
添加到f:ajax
=&gt;导致刷新页面onevent="myFunc()"
添加到f:ajax
=&gt;与onclick
属性f:ajax
下一个onevent
attr。 =&GT; update2 (它应该如何运作):
答案 0 :(得分:24)
onevent
处理程序实际上会被调用三次,它应该指向一个函数名,而不是函数本身。在发送ajax请求之前,有一次是在ajax响应到达之后,一次是在成功更新HTML DOM之后。您应该检查给定数据参数的status
属性。
function listener(data) {
var status = data.status; // Can be "begin", "complete" or "success".
switch (status) {
case "begin": // Before the ajax request is sent.
// ...
break;
case "complete": // After the ajax response is arrived.
// ...
break;
case "success": // After update of HTML DOM based on ajax response..
// ...
break;
}
}
在您的特定情况下,您只需添加一个检查状态是否为success
。
function myFunc(data) {
if (data.status == "success") {
var element = document.getElementById('form:#{bean.componentId}');
element.focus();
element.select();
}
}
您需要通过名称引用该函数:
<f:ajax ... onevent="myFunc" />