如何为插件的任何实例只运行一次语句?

时间:2013-09-16 08:00:42

标签: jquery jquery-plugins

我正在为jQuery编写一个插件,我想知道是否有办法只调用一次影响插件任何实例的方法。

更具体地说,我的代码如下所示:

var body = $('body');

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

在上面的代码中,“console.log(”用我的插件做一些事情“);”正在运行相同数量的插件实例。

例如,如果我有以下代码:

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

现在,如果我点击文档中的任何链接,我会在控制台中收到三次“使用我的插件执行一些操作”的消息,因为此事件已注册三次。

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

注意:要构建我的jQuery插件,我使用了this skeleton

1 个答案:

答案 0 :(得分: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);
}