jQuery插件,绑定事件只有一次

时间:2016-02-18 17:37:28

标签: javascript jquery events triggers bind

我正在构建一个lightbox jQuery插件,我遇到了问题,事件触发频繁,因为我在同一页面上有灯箱。也许你知道,如何防止这种情况。这是一个示例代码。

;( function( $, window, document, undefined ){
'use strict';

$.fn.myPlugin = function( options ){

    // here are some functions for click and touching   
    $(document).on('click', '.elem', function(e){
        e.preventDefault();
        console.log('click');
    });

    $( document ).on( 'touchstart','.elem', function(e){
        console.log('touch');
    });

    return this;
};
})( jQuery, window, document );

所以如果我现在经常调用我的插件,就像我想要的那样:

$('.elem1').myPlugin();
...
$('.elem4').myPlugin();

点击或触摸console.log会像我调用插件一样频繁启动。你对如何解决它有什么建议吗?

这是当前插件在一个页面上有4个Gallerys。 http://andreknieriem.de/simple-lightbox-dev/

1 个答案:

答案 0 :(得分:0)

你的onClick为类.elem的每个元素调用函数。当您执行$(document).on('click'...时,您也在监听页面上的任何位置。我猜这不是你想要的行为吗?你的意思是$(this).on('click' ...

尝试类似:

$.fn.myPlugin = function( options ){
    var target = this;

    // here are some functions for click and touching   
    $(document).on('click', target, function(e){
        e.preventDefault();
        console.log('click');
    });

    ...