作業中のWebページでリソースリークを発見しました。
このWebページには2つのテキストフィールドがあり、クリックするとモーダルダイアログが表示され、バックエンドへのデータリクエストが実行され、ユーザーが最初にクリックしたテキストボックスで使用するエントリを選択できるテーブルにその情報が表示されます。
クリックイベントを次のようにテキストボックスにバインドしています。
var $field = $('#one-of-the-text-fields');
$field.click(function () {
App.DialogClass.show();
App.DialogClass.PopulateTable();
App.DialogClass.GotoPageButtonAction(actionArgs); // Offender!
});
...どの呼び出し...
App.DialogClass = (function($) {
var pub {},
$gotoPage = $('#pageNumberNavigationField'),
$gotoPageButton = $('#pageNumberNavigationButton');
// ...SNIP unimportant other details...
pub.GotoPageButtonAction = function (args) {
$gotoPageButton.click(function () {
var pageNumber = $gotoPage.val();
pub.PopulateTable(args); // Breakpoint inserted here...
});
};
return pub;
})(jQuery);
ChromeのJavaScriptデバッガーを使用して実行したときに、別のボタンをクリックするたびに常に1つの追加のブレークポイントがヒットするため(たとえば、フィールドAを初めてクリックしたときに、ブレークポイントが2回ヒットします。フィールドをヒットすると、リークに気づきました。その後B、ブレークポイントが3回ヒットします。その後Aをクリックすると、ブレークポイントが4回ヒットします。必要に応じて外挿します。)
コードのどこにも、特定のフィールドの既存のクリックイベントについて何もしていません。私のリークは、イベントがクリーンアップされていないという事実に起因しているのではないかと思います。そうは言っても、私はJavaScript/jQueryにあまり精通していません。コントロールからクリックイベントを削除するためのいくつかのテクニックは何ですか?