1

我可以使用以下代码提交我的 JSF 生成的表单:

<h:commandButton  id="btnValidate" type="submit"  value="#{rb.REGISTER}" action="#{login.registerAccount}" />

但我想在提交表单之前处理 JS 代码,所以我添加onClick="test();"commandButtontype 到button

<h:commandButton  id="btnValidate" type="button"  value="#{rb.REGISTER}" action="#{login.registerAccount}" onClick="test();" />

我的test功能:

function test(){    
   $('#j_idt14\\:register_form').submit();

}

使用此代码,我的表单已提交,但login.registerAccount不再调用我的函数。

如何用JS提交表单并调用服务器端函数(属性action)?

4

1 回答 1

4

不需要自己通过JS提交表单。它只会干扰 JSF 自己处理表单提交的工作。只是为您提供了一个在提交表单之前onclick执行一些 JavaScript 代码的钩子。除非您从处理程序内部返回,否则将始终提交表单。falseonclick

因此,如果您对阻止表单提交不感兴趣并且总是想提交它,只需删除该submit()调用即可。

例如

<h:commandButton ... onclick="onbeforesubmit()" />

function onbeforesubmit() {
    // ...
}

或者,如果您真的有兴趣根据处理程序中的逻辑阻止表单提交,则返回truefalse相应地。返回false将阻止表单提交。

例如

<h:commandButton ... onclick="return validate(this.form)" />

function validate(form) {
    var valid = true;

    // ... (some logic which may set it to false)

    return valid;
}

(请注意,我已经演示了一种比使用更简单的方法来获取函数内部的父表单$('#j_idt14\\:register_form');如果需要,您只需将$(form)其包装在 jQuery 对象中)

于 2012-12-18T13:33:49.467 回答