Проблема с наложением прототипа - PullRequest
0 голосов
/ 27 октября 2011

У меня есть следующий код в файле с именем overlay.js:

Event.observe(window, 'load', function() {
    emailSignUp();
});

function emailSignUp() {
    var x = new Overlay();
    x.show('<div class="popup"><div class="close">[ <a href="#" onclick="x.hide(); return false;">Close Window</a> ]</div></div>', {
        position: 'center',
        modal: true,
        animate: true,
        auto_hide: false,
        click_hide: false,
        opacity: 1,
        bckg_opacity: 0.7 }
    );
}

Используется прототип 1.6.1 и следующая библиотека наложений: http://kammerer.boo.pl/code/prototype-overlay/

Как правило, при нажатии на ссылку «закрыть» внутри всплывающего окна, всплывающее окно не закрывается, и я получаю x не определено, что имеет смысл.

Я пытался создать экземпляр x вне функции emailSignUp, передать его и вернуть, но это также не сработало.

Я никогда раньше не работал с прототипом, поэтому я пытаюсь найти наилучший способ заставить функцию hide работать.

При звонке hide сразу после show:

function emailSignUp() {
    var x = new Overlay();
    x.show('<div class="popup"><div class="close">[ <a href="#" onclick="x.hide(); return false;">Close Window</a> ]</div></div>', {
        position: 'center',
        modal: true,
        animate: true,
        auto_hide: false,
        click_hide: false,
        opacity: 1,
        bckg_opacity: 0.7 }
    );
    x.hide();
}

Работает без проблем.

Любая помощь очень ценится!

-Ryan

1 Ответ

1 голос
/ 27 октября 2011

Просто создайте функцию прослушивания событий в той же области видимости и привяжите ее:

function emailSignUp() {
    var x = new Overlay(),
    linkId = "link-"+(+new Date); //Gives something like "link-1319732520379"

    x.show('<div class="popup"><div class="close">[ <a href="#" id="'+linkId+'">Close Window</a> ]</div></div>', {
    position: 'center',
    modal: true,
    animate: true,
    auto_hide: false,
    click_hide: false,
    opacity: 1,
    bckg_opacity: 0.7 }
    );

    Event.observe( document.getElementById( linkId ), "click",
        function(){
        x.hide(); //x is known here
        return false;
        }
    );
}

Примечание: я никогда не использовал прототип, поэтому я использую document.getElementById

...