2016-10-05 11 views
0

私は長い間、自分のコードを動作させるのに苦労していて、StackOverflowでさまざまな答えを試みました。結局、私はこれに落ち着い:jquery/javascriptでCTRL + Sをキャプチャ/防止するのはなぜですか?

$(window).bind('keydown',function(e) { 
    if ((e.which=='115' || e.which=='83') && (e.ctrlKey || e.metaKey)){ 
     e.preventDefault(); 
     saveForm(); // Uses AJAX to save all the data in my form 
     return false; 
    } 
} 

問題があることに関係なく、私は限り、ウィンドウ、ドキュメント、KeyDownイベント、キー入力に結合し、何も作業していないの組み合わせのような試み、保存ダイアログがとにかくアップ何が来るのか。

答えて

1

ページをアンロードするときにsaveForm()関数を使用するため、ナビゲートする前にデータが保存されていることを確認するために、非同期になるようにajax関数を設定する必要がありました。これは、私がsaveForm()コールをコメントアウトしたときに働いているように見えた(私はpreventDefaultがそれを止めなかった理由を知らないが、それは保存して、return falseのステートメントに達するという競争条件があることを意味した) )。

競合状態を解決するために、同期または非同期に保存を行うタイミングを選択する変数を設定することを検討しましたが、完全にキャンセルした後まで保存を遅らせることで競合状態を完全に回避できます。CTRL + Sキーの組み合わせ。後に、数ミリ秒でpreventDefaultreturn falseの両方がすぐに実行し、私の節約ポップをこれにより

$(window).bind('keydown',function(e) { 
    if ((e.which=='115' || e.which=='83') && (e.ctrlKey || e.metaKey)){ 
     e.preventDefault(); 
     setTimeout(function(){saveForm();},200); 
     return false; 
    } 
} 

:ここで働く私のコードの最終バージョンです。

関連する問題