2011-10-19 7 views
5

現在、特定のフォーム要素でフォーカスアウトを使用しているときに、ユーザーがタブ付きまたは別のフィールドをクリックしたときを知ります。フォーカスがキー押下またはクリックによるものかどうかを検出します

これの直後にajaxコールが起動し、いくつかの異なるフィールドに入力されるため(例:有効な郵便番号を入力して、dbを検索して都市を返します)、これを知る必要があります。

今、私の質問は、ajax呼び出しは、HTML応答を受信し、それを読み込むと、フォームは現在のフォーカスを失う原因となります。

私は、そのフォーカスを保存し、ajax呼び出し後に元に戻す方法が必要です。

これまでのところ、私は仕事の種類にナビゲーションを得ました。それはかなり壊れ、ページ上の他のもの(例えば、ダイアログウィンドウ)の読み込みを妨害する。だから、もっと良い方法がなければならないと思うので、ここにいるのです。より多くの情報が必要な場合はお知らせください。コードは以下のとおりです。

すべてベスト!

$('.DZipCode').focusout(function() { 
     var ZipCode = $('.DZipCode').val(); 


    $.ajax({ // create an AJAX call... 
     async: false, 
     type: "POST", // GET or POST 
     url: "/Home/SelectZipCodeDataDestination", // the file to call` 
     data: { zipCode: ZipCode }, 
     success: function (response) { // on success.. 
      $(":input").focus(function() { 
       var prevFocus; 

       prevFocus = $(this).attr("id"); 
       $('#quotetab').html(response); 
       $('#'+prevFocus).focus(); 
      // });    
     } // end of success 
    }); // end of .ajax 

});

答えて

6

私が考えることができる最も簡単な方法は、キーが押されたときにフラグを設定し、知る必要があるときはいつでもフラグをチェックすることです。

var tabPressed = false; 

$('input[type="text"], textarea') 
    .keydown(function(e) { 
     var keyCode = e.keyCode || e.which; 

     tabPressed = (keyCode==9) ? true : false; 
    }) 
    .focus(function() { 
     tabPressed = false; 
    }); 

次に、あなたがあなたのAJAXの成功コールバック(または場所)に

if(tabPressed) { 
//some stuff 
} 

を行うことができます。

+0

これを行うには少し余分になりましたが、方向は間違いありませんでした。何らかの理由で、ajax呼び出しからの応答が、私のtabPressed変数をfalseにリセットしていました。私は、単にfocusout out関数内のセカンダリ変数の中に値を格納することになりました。助けてくれてありがとう! –

関連する問題