在ajax调用<f:ajax>之后处理onclick函数

提交表单(ajax调用)后,我正在尝试select并重点select组件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> 

此解决scheme正在工作,但问题是, <f:ajax>被称为AFTER onclick ,所以表单在组件select后呈现,焦点被清除。

如何在表单呈现后调用我的函数?

更新:(我已经尝试过)

  • add onevent="myFunc();"f:ajax =>导致刷新页面
  • onevent="myFunc()"f:ajax =>与onclick属性相同的行为
  • 下一个f:ajax与一个attr的f:ajax 。 =>仍然是一样的

更新2 (它应该如何工作):

  • 提交button是ajax调用
  • 表格根据需要进行清理
  • 集中适当的领域(取决于一些用户select的因素)

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" />