2011-01-11 9 views
2

ループを含むフォームを含むゾーンがあります。誰かがループ内のテキストフィールドを変更すると、フォーム全体を更新し、onKeyUpイベントをループします。Tapestry5でゾーンの更新後にフォーカスを設定する方法

私は最後に更新されたテキストフィールドにフォーカスを戻すようにTapestryに指示する方法を見つけようとしています。私はこれが働いていると思うが、ゾーンの更新は、フォーカスが設定された直後にテキストフィールドがフォーカスを失うように見える。問題のないゾーンの外にあるフィールドにフォーカスを設定できるので、問題の原因となっているゾーンの更新のようです。

これを処理する方法についてのご意見はありますか?

答えて

5

の音:falseからautofocusの設定

は、この動作を無効にします。このことができます

$('formZone').observe(Tapestry.ZONE_UPDATED_EVENT, function(event) { 
    // set the focus 
}); 

希望:私はJavaScriptでタペストリーゾーン更新イベントをリッスンオブザーバを設定することのようなタスクを実行する必要があるとき。

3

Formコンポーネントのパラメータはautofocusです。このパラメータはデフォルトでtrueになっており、JavaScriptでフォームをレンダリングすることがあります。フォームがロードされた後、JSはフォーカスを最初のフォーム要素に設定します。あなたはゾーンがリロード行われた後、フォーカスを設定する必要がありますように

<form t:type="Form" t:autofocus="false"> 
+0

ありがとうございました。私は実際にそれを両方の方法で試しましたが、それは問題ではないようです。私は問題なしでゾーンアップデートの外にあるフィールドにフォーカスを設定できます。私がカーソルをアクティブにしておくことができないのは、ゾーン内のものだけです。 – Mark

+0

そのヒントのおかげで - 本当にどこにも書かれていません。 –

3

私は、これは古いスレッドですけど、私がやったことだった。

のjQueryを使用した:

<t:zone t:id="formZone"> 
<t:form .... class="formId" t:zone="formZone> 
. 
. 
</t:form> 

jQuery.noConflict(); 
(function($) { 
    $(document).ready(function() { 
     $(".formId").find("input, select").filter(function(){ 
      if($(this).val() == ""){   
      return true; 
      } 
     }).first().focus(); 

    }); 
})(jQuery); 


</t:zone> 

これは、最初の空の入力にフォーカスを取得するかを選択します。もちろん、あなたのページにjqueryを含める必要があります。 noConflictは、プロトタイプに問題がないことを確認します。

関連する問題