2012-11-24 9 views
5

フォーム(ajax呼び出し)を送信した後、選択されたコンポーネントIDにフォーカスを当てようとしています。ajax呼び出し後にonclick関数を処理する<f:ajax>

<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>onclick後に呼び出されること、であるため、フォームは、コンポーネントの選択後にレンダリングされ、フォーカスがクリアされます。

フォームがレンダリングされた後に私の関数を呼び出す方法はありますか?

更新:(私は例えば試した)

  • f:ajaxonevent="myFunc();"を追加=>さわやかなページにつながる
  • onclick属性
  • 次のようonevent="myFunc()"f:ajaxへ=>同じ動作を追加f:ajaxonevent attr。 =>まだアップデート2と同じ

(どのようにそれが必要な作品):

  • 送信ボタンをアヤックスに依存する(必要
  • 適切なフィールドがフォーカスされるよう
  • フォームが洗浄されると呼ばれています一部のユーザーが選択した要因)
+0

「onCompleteの」-attribut primefacesのコマンドボタンにし、RichFacesのコマンドボタンにはあります。 – stg

答えて

24

oneventハンドラは実際にはinvそれは関数自体ではなく関数名を指しているはずです。 ajaxリクエストが送信される前の1回、ajaxレスポンスが到着してから1回、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" /> 
+0

ありがとうございます。しかし、それは奇妙です、componentIdは今でも同じです、それは常に同じコンポーネントを選択します.. – gaffcz

+1

それは別の問題です。 ELはWebブラウザのJSFと一緒に実行されますが、WebブラウザのHTML/JSでは実行されません。生成されたHTML出力を見てください。 JS関数に '#{} 'がないことがわかります。 – BalusC

+0

Aha(分かりません):-) ComponentIdは、Beanにinicial化されたままです。そのprobleにはいくつかの解決策がありますか?私は円で回転しています:( – gaffcz