1

ページの更新後にコンポーネントIDを選択するための関数を呼び出しています。

$(document).ready(
  function() {
    document.getElementById('form:#{myBDE.componentId}').focus();
    document.getElementById('form:#{myBDE.componentId}').select();
  }
)

私の送信ボタンの例:

<h:form id="form">
  <h:commandButton id="btnSubmit" action="#{myBDE.save}" type="submit" >
    <f:ajax execute="@form" render="@form"/>
  </h:commandButton>
  ...
</form>

送信ボタンをクリックするたびに呼び出される同じ関数を作成するにはどうすればよいですか(ajaxを使用しているため、ページを再読み込みせずに作業しています。document.readyでは不十分です)。出来ますか?

更新(部分的に機能するソリューション):

var myFunc = function() {
  document.getElementById('form:#{myBDE.componentId}').focus();
  document.getElementById('form:#{myBDE.componentId}').select();
};

$(document).ready(function() {
  myFunc();
  $('input[type=submit]').click(myFunc);    
});

関数を追加onclick="return myFunc();"して呼び出すことができますh:commandButton。問題は、<f:ajax>関数を呼び出した後にフォームをレンダリングするため、選択とフォーカスがクリアされることです:(

4

5 に答える 5

2

関数に名前を付け(現在は無名関数)、必要に応じて関数を呼び出します。

$(document).ready(
  onPageLoad(); // call it when page loads    
  $('form').submit(onPageLoad); // also call whenever a form is submitted
)

function onPageLoad() {
    document.getElementById('form:#{myBDE.componentId}').focus();
    document.getElementById('form:#{myBDE.componentId}').select();
    return true;
}
于 2012-11-24T08:20:35.703 に答える
1

これはうまくいくはずです

$('input[type="submit"]').click(function(){ 
  document.getElementById('form:#{myBDE.componentId}').focus(); 
  document.getElementById('form:#{myBDE.componentId}').select();
 });

実際、関数を任意のイベントにバインドできます。この場合、属性type=submitを持つ入力タグのクリックイベントです。

于 2012-11-24T08:34:54.457 に答える
1

ハンドラーを上位レベルのdom要素に委任する必要があります。

$(document).ready(function() {
  $('h:body').on('click', 'input[type=submit]', function() {
    document.getElementById('form:#{myBDE.componentId}').focus();
    document.getElementById('form:#{myBDE.componentId}').select();
  });    
});

jQuery.on()を参照してください。

セレクターが提供されている場合、イベントハンドラーは委任されたものと呼ばれます。イベントがバインドされた要素で直接発生した場合、ハンドラーは呼び出されませんが、セレクターに一致する子孫(内部要素)に対してのみ呼び出されます。jQueryは、イベントターゲットからハンドラーがアタッチされている要素(つまり、最も内側の要素から最も外側の要素)までイベントをバブルし、セレクターに一致するパスに沿ったすべての要素に対してハンドラーを実行します。

そして後で:

委任されたイベントには、後でドキュメントに追加される子孫要素からのイベントを処理できるという利点があります。委任されたイベントハンドラーがアタッチされたときに存在することが保証されている要素を選択することにより、委任されたイベントを使用して、イベントハンドラーを頻繁にアタッチおよび削除する必要をなくすことができます。

したがって、イベントは、後でajaxを介して追加された場合でも、そのタイプのすべての要素に対して処理されます。ここでは委任先の要素として使用h:bodyしましたが、document.ready時に存在し、すべての送信入力の祖先であることが保証されている任意の要素を使用できます。

于 2012-11-24T10:16:35.990 に答える
0

このことを試してください

 $(document).ready( function (){

           $('input[type=submit]').click( function (){
                  // Whatever you want on submit button click option.
           }
 });

これにより、ページ上のすべての送信ボタンが取得され、クリックイベントがそれにバインドされます。このコードは、送信ボタンがクリックされるたびに呼び出されます。

于 2012-11-24T08:37:28.913 に答える
0

あなたがそれらに異なるIDまたは名前を持っているなら、それはただ何かをすることです

$(document).ready(function(){
    $('#btn1, #btn2, #btn3').on('click', function(evt){
        evt.preventDefault();
        //your code
        $(this).submit(); // or not submit, your choice
    });
});
于 2012-11-24T08:19:55.577 に答える