イベント委任は正しい解決策です。問題は、ページがロードされたときに「次のページ」の HTML 要素が DOM の一部ではなかったことです。したがって、次のようなことをした場合:
$(function() {
$('#some-element-on-the-next-page').click(function() {
foo();
});
});
ハンドラーはバインドしませんでした。
イベントを $(document) に添付しません。DOM のロード時に使用できる最も近い親にそれらをアタッチします。たとえば、body タグまたは body の最初の子である固定幅ラッパー (レイアウトでこのタイプの構造が使用されていると仮定します)。
アタッチする要素が .empty() で空にされたり、.html() で再作成されたりしないようにしてください。バインディングが壊れます。メソッドを起動するためにイベントがドキュメント ノードまでバブリングする必要がないため、委任されたハンドラーを DOM ツリーの下位にアタッチすると、パフォーマンスが向上します。
すべての関数とプラグインを書き直す必要はなく、それらを起動するイベントへのバインディングだけを書き直す必要があります。
通常、モジュール パターンを使用し、メソッド定義をクリック ハンドラーから切り離します。私のメソッドはすべて外側のクロージャで定義されています。クリックなどのユーザー イベントをバインドする「ドキュメント準備完了」セクションを作成します。
例えば:
var myModule = (function() {
var public = {};
public.foo = function() {
// do something cool here
};
// document ready
$(function () {
$('#site-container').on('click', '.js-foo', function() {
public.foo();
});
});
return public;
})();
将来バインディングを変更する必要がある場合は、ドキュメント準備セクション内の呼び出しのみを変更する必要があります。