删除所有对象实例

时间:2011-03-21 08:17:50

标签: javascript jquery

编辑:示例 - http://jsfiddle.net/JWx7z/9/

我正在使用一个灯箱插件https://github.com/premasagar/nitelite而我正在黑客攻击它以使其表现得如我所想。

灯箱由两个元素组成:叠加层(浅色透明窗口)和内容窗口。

通常,当灯箱关闭时,叠加层会淡出并移除。打开灯箱时,它会被添加并淡入。

然而,当从灯箱移动到另一个灯箱时,这使得转换不合需要。我已经黑了它,所以旧的叠加层仍然存在,如果我们在两个灯箱之间移动,新的叠加层将被中止,所以它只是内容窗口的变化。

这当然意味着叠加层是灯箱到当前内容窗口的单独实例。这反过来意味着当我尝试通过点击叠加来关闭灯箱时,只删除叠加层 - 将内容窗口保留在我的页面上。

...

$(this.overlay)
    .bind('add', function() {
        this.node
            .one('click', function(){
                lb.close();
            });
    });

注意:灯箱的每个实例都称为lb。

我可以通过在关闭按钮上添加一个人工点击来删除此窗口:

$('#lightbox p.close a').click();

但是后来有一些代表,因为lb的一些残余仍然存在 - 例如,如果我想打开一个新的灯箱,它认为灯箱已经存在,我们正在两者之间移动,所以不添加叠加,因为它认为那里已经存在一个。

如何处理它,以便在点击叠加层时关闭所有lb实例?

由于

编辑:如果来自灯箱,则中止添加叠加的代码

...

open: function(contents, transition){
    var lb = this;
        if (transition !== 0) {
            this.overlay.add();
    } 

...

1 个答案:

答案 0 :(得分:0)

您可以在关闭时将覆盖点击功能更改为fadeOut .nitelite-lightbox-container

$(this.overlay)
    .bind('add', function(){
        this.node
            .one('click', function(){
                ...
                $(this).next('.nitelite-lightbox-container').fadeOut();
                lb.close();
            });
    });

See fiddle.

当您重新打开灯箱时,它会警告“lb已经存在”,但它仍然可以正常运行。