【问题标题】:Process onclick function after ajax call <f:ajax>ajax 调用后处理 onclick 函数 <f:ajax>
【发布时间】:2012-11-12 11:32:08
【问题描述】:

我正在尝试在提交表单(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>

此解决方案有效,但问题是 &lt;f:ajax&gt;onclick 之后被调用,因此在选择组件后呈现表单,并清除焦点。

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

更新:(例如我试过)

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

update2(应该如何工作):

  • 提交按钮是ajax调用
  • 根据需要清理表单
  • 关注适当的字段(取决于某些用户选择的因素)

【问题讨论】:

  • primefaces 命令按钮和richfaces 命令按钮中有一个“未完成”属性。

标签: ajax jsf jsf-2


【解决方案1】:

onevent 处理程序实际上会被调用 3 次,它应该指向一个函数名,而不是函数本身。一次是在发送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" />

【讨论】:

  • 谢谢。但是很奇怪,componentId 现在还是一样,它总是选择同一个组件..
  • 这是一个不同的问题。 EL 在 webserver 中与 JSF 一起运行,而不是在 webbrowser 中与 HTML/JS 一起运行。查看生成的 HTML 输出。你会看到 JS 函数中没有 #{} 了。
  • 啊哈(不明白):-) ComponentId 仍然是在 bean 中初始化的.. 这个问题有什么解决方案吗?我在转圈:(
  • JSF/EL 生成 HTML/JS 代码。它们不同步运行。具体功能需求不明确,很难提出解决方案。至少需要在客户端完全解决。
猜你喜欢
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2015-11-13
相关资源
最近更新 更多