开发者

Remove all instances of object

Edit: Example - http://jsfiddle.net/JWx7z/9/

I'm using a lightbox plugin https://github.com/premasagar/nitelite and I'm hacking it a bit to get it to behave how I want.

The lightbox is made up of two elements: the overlay (dark slightly transparent window), and the content containing window.

Normally when a lightbox is closed the overlay is faded out and removed. When opening a lightbox it is added and faded in.

However when traversing from lightbox to another lightbox this makes the transition undesirable. I have hacked it so the old overlay remains, and the new overlay is aborted if we are going between 2 lightboxes, so it is just the content window that changes.

This means of course the overlay is a seperate instance of the lightbox to the current content window. Which in turn means when I try and close the lightbox by clicking on the overlay, only the overlay is removed开发者_如何学C - leaving the content window still on my page.

...

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

Note: Each instance of the lightbox is called lb.

I can remove this window by adding an artificial click to the close button:

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

but this has reprecussions later as some remnants of lb still exist - for example if I want to open a new lightbox it thinks a lightbox already exists and we're moving between the two, so doesn't add an overlay as it thinks there is already one there.

How can I work it so all instances of lb are closed when clicking on the overlay?

Thanks

Edit: Code for aborting addition of overlay if coming from a lightbox

...

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

...


You can change your overlay click function to fadeOut the .nitelite-lightbox-container as well on close:

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

See fiddle.

It alerts "lb already exists" when you reopen the lightbox, however it still behaves correctly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜