1

このコードを使用して、JSF で生成されたフォームを送信できます。

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

しかし、フォームを送信する前にJSコードを処理したいので、タイプを追加onClick="test();"しました:commandButtonbutton

<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() {
    // ...
}

または、ハンドラーのロジックに応じてフォーム送信をブロックすることに実際に興味がある場合は、それに応じてtrueまたはを返しfalseます。戻るfalseと、フォームの送信がブロックされます。

例えば

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

function validate(form) {
    var valid = true;

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

    return valid;
}

( を使用するよりも関数内で親フォームを取得する簡単な方法を示したことに注意してください。必要に応じて jQuery オブジェクトでラップする$('#j_idt14\\:register_form')だけです)$(form)

于 2012-12-18T13:33:49.467 に答える