2

http://blog.jeremymartin.name/2008/02/building-your-first-jquery-plugin-that.html

このチュートリアルに基づいて、最初のプラグインを作成し、いくつかの変更を加えました。しかし、サイトに新しいコンテンツをロードすると、動的に生成されたコンテンツに対してプラグインが機能しません。

ライブにする方法がわかりません。イベントは既に使用されていますが.on、プラグインのビルドは機能しません。

これが jsFiddle です: http://jsfiddle.net/bT4dH/13/

コンテンツを動的に追加するたびにプラグインを呼び出すことができることはわかっていますが、それはすぐに面倒になるので、それを避け、プラグインに直接統合することを好みます。

私はこれを試し始めていました:

$(document).on('DOMNodeInserted', function (e) {
    if (e.target.classname === 'JS_postShrinker') {
         $(e.target).shrinker(options);
    }
});

しかし、うまくいきません

アップデート

DOMNodeInserted は無視してください。私は試してみました。一般的にプラグインをライブにする方法を教えてください。私は同じ問題を抱えています:

4

2 に答える 2

3

.on()委任を使用して、少し異なる方法で使用することで、簡単にライブにすることができます。ドキュメントで詳しく説明されています

$(closeParent).on(イベント、selectorForElement、ハンドラ);

ハンドラーをアタッチするときに DOM の一部になることが確実にわかっている親を選択するだけです。最悪の場合、選択できますbody

次に、この要素にハンドラーをアタッチし、(いつでも DOM に挿入できる) 子要素のセレクターを指定します。ハンドラーは、セレクターに一致する子要素のいずれかでイベントが発生するたびに実行されます。このメソッドは、非常に巧妙な方法でイベント バブリングを利用します。

編集:もちろん、これはイベント処理でのみ機能します。要素が DOM に追加されたときに要素を初期化する必要がある場合 (サイズ変更、装飾など)、これが発生するたびにプラグインを呼び出すことをお勧めします。これは、ほとんどのプラグインが機能する方法です。このイベントは、すべてのMutation イベントDOMNodeInsertedと同様に、クロスブラウザーではなく、廃止されているため、使用しないでください。

于 2012-09-01T13:58:08.963 に答える
-1

イベントをデリゲートするための追加のパラメーター (セレクター) があります。

$(document).on('DOMNodeInserted',"." + opts.clickZoneClass, function (e) {
    if (e.target.classname === 'JS_postShrinker') {
         $(e.target).shrinker(options);
    }
});
于 2012-09-01T13:57:12.647 に答える