2011-07-18 7 views
0

私はajax経由で読み込まれるページを作成しました。このページでは、指定したキー[jqueryのホットキーを使用しています]にいくつかの関数を割り当てる関数を作成しました。ここでjavascript:ajax経由でページを読み込んだ後に複数のイベントが実行されます。

は私が

function setupKeys() 
{ 
    $.each(keyMap, function (event, listener_name){ 
     $(document).bind('keydown', event, listener[listener_name]); 
    }); 
} 

これは、ページがロードされるたびに実行される機能を割り当てるために使用する機能です。

初めてページを読み込んでEnterキーを押すと、その機能が実行されます。ブラウザを参照してajax経由でページを再度読み込んでEnterキーを押すと、関数は2回実行されると仮定します。そして、私は同じ機能を3回繰り返します。

どうすればこの問題を回避できますか? keyMapはオブジェクトです

keyMap = { 
'Ctrl+s':'save_data', 
'return':'test_return', 
'tab':'test_return' 
}; 

listener = new Array();

助けてください。

[英語が貧しい人には申し訳ありません]

Krish。

答えて

1

なぜバインドする前にイベントをバインド解除しないのですか?どんなprobsも束縛されず、二重イベント登録を防止する。

function setupKeys() 
{ 
    $.each(keyMap, function (event, listener_name){ 
     $(document).unbind('keydown', listener[listener_name]); 
     $(document).bind('keydown', event, listener[listener_name]); 
    }); 
} 
+0

をアンバインドするために使用する必要がありますが、スペンダーありがとうございます。私はあなたが示唆したように試みましたが、まだイベントイベントが複数回トリガされます。しかし、私が 'setupKeys'が一度だけ実行されることを保証すれば、marcのようなものは、ajax経由でページをリロードしても、イベントトリガは1回だけであることを示唆しています。しかし私が発行したのは、私はこの機能を複数のページで使用しなければならないということです。 – Nick

+0

私はフォームに代入しようとしたときに、イベントをドキュメントに代入するのではなく、コードをいくつか変更しました。 'console.log($("#mainForm ")。data( 'events'));'これは火かき棒で 'keydown Object {}' – Nick

+0

私はjquery 1.3.1を使用しています – Nick

0

setupKeysが実行されたかどうかを確認する必要があります。ただ、あなたの関数の内部でfalseに設定される変数

var isSetupKeysCalled = false; 

を追加します。

0

イベントをバインドする前にアンバインドして、イベントがページ上で複数回ティアされないようにしてください。

$.each(keyMap, function (event, listener_name){ 
     $(document).unbind('keydown').bind('keydown', event, listener[listener_name]); 
    }); 
0

unbindメソッドで問題を解決できませんでした。だから私はマークとして提案された機能を変更しました。そして私はそれが今働いていると思います。

ありがとうございますmarc

0

問題が解決しました。

私は構文次のjQueryのホットキーを使用していたようにイベント

$.each(keyMap, function (event, listener_name){ 
      $(document).unbind('keydown', event, listener[listener_name]); 
      $(document).bind('keydown', event, listener[listener_name]); 
     }); 
関連する問題