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 次。

那么,有没有办法为任意数量的插件实例只运行一次代码?

注意:为了构建我的 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 回答