2011-10-27 60 views
0

我在一個文件中的以下代碼調用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沒有定義,這是有道理的。

我嘗試在emailSignUp函數之外實例化x,將它傳入並返回,但這也不起作用。

我從來沒有在原型上工作過,所以我試圖找到使hide函數有效的最佳方法。

當調用hideshow之後:

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

在同一範圍內只需要創建一個事件偵聽器的功能,並將其綁定:

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

+0

啊,是的!精美的作品。 – NightHawk