0

jQuery 用のプラグインを作成していますが、プラグインの任意のインスタンスに一度だけ影響するメソッドを呼び出す方法があるかどうか疑問に思っています。

より具体的には、次のようなコードがあります。

var body = $('body');

body.on(
    'click',
    'selector',
    function(e)
    {
        console.log("Do some stuff with my plugin");
    }
);

上記のコードでは、"console.log("Do some stuff with my plugin");" 同じ量のプラグイン インスタンスに対して実行されています。

たとえば、次のコードがあるとします。

<body>
    <a href="#" class="selector_1">Click me</a>
    <a href="#" class="selector_2">Click me</a>
    <a href="#" class="selector_3">Click me</a>
    <script type="text/javascript">
        jQuery(document).ready(
            function($)
            {
                $('.selector_1').myPlugin();
                $('.selector_2').myPlugin();
                $('.selector_3').myPlugin();
            }
        );
    </script>
</body>

ドキュメント内のいずれかのリンクをクリックすると、コンソールに「Do some stuff with my plugin」というメッセージが 3 回表示されます。これは、このイベントが 3 回登録されているためです。

それで、任意の量のプラグインインスタンスに対して一度だけコードを実行する方法はありますか?

注: jQueryプラグインを構築するには、このスケルトンを使用しました

4

1 に答える 1

1

最も簡単な方法は、プラグインが既に初期化されていることを示すフラグを body 要素に追加し、イベントを再度バインドする前にこれを確認することです。

var body = $('body');
// If plugin has not already bound event
if (!body.data('myplugin-init')) {
    body.on(
        'click',
        'selector',
        function(e)
        {
            console.log("Do some stuff with my plugin");
        }
    );
    // Flag that event has been bound
    body.data('myplugin-init', true);
}
于 2013-09-16T08:15:00.697 に答える