2009-10-05 96 views
0

作爲我學習jQuery的努力的一部分,我正在製作自己的模態窗口。一切似乎都很好,但我無法點擊疊加層來解封。任何想法爲什麼?幫助一個jQuery的模態窗口

您可以檢查它在這裏jsbin - http://jsbin.com/irado

這裏是我的腳本:

var $j = jQuery.noConflict(); 
$j(document).ready(function() { 
// Pause Function 
    $j.fn.pause = function(duration) { 
    $j(this).animate({ dummy: 1 }, duration); 
    return this; 
}; 
// Add our click ON event 
$j(".open").click(function() { 
// IE6 select box iframe hack 
if (jQuery.browser.msie) { 
if(parseInt(jQuery.browser.version) == 6) { 
    $j('body').prepend('<iframe style="z-index: 999; width:100%; height:100%; filter: alpha(opacity=0); left: 0px; zoom: 1; position: absolute; top: 0px;" src="javascript:false;"></iframe>'); 
}}; 
// Add our overlay div 
$j('body').prepend('<div id="overlay" />'); 
// Fade in overlay 
$j('#overlay').animate({"opacity":"0.2"}, 300), 
// Animate our modal window into view 
$j('#window').css({"top":"45%"}).pause(200).css({"opacity":"0"}).show().animate({"top": "50%", "opacity": "1"}, 300) 
}); 
    // Add our click OFF event 
$j('a.close, #overlay').click(function() { 
//Animate our modal window out of view 
$j('#window').animate({"top": "55%", "opacity": "0"}, 300).fadeOut(200), 
// Fade out and remove our overlay 
$j('#overlay').pause(500).fadeOut(200, function() { $j(this).remove()}) 
}); 

}); 

回答

1

出現問題的原因是因爲您試圖在點擊事件已經存在之前附加點擊事件。嘗試在「.open」元素的click事件內移動click事件的綁定,因爲這是您將「#overlay」預先添加到主體的位置。

嘗試這種情況:

var $j = jQuery.noConflict(); 
$j(document).ready(function() { 
// Pause Function 
    $j.fn.pause = function(duration) { 
    $j(this).animate({ dummy: 1 }, duration); 
    return this; 
};  
// Add our click ON event 
$j(".open").click(function() { 
// IE6 select box iframe hack 
if (jQuery.browser.msie) { 
    if(parseInt(jQuery.browser.version) == 6) { 
     $j('body').prepend('<iframe style="z-index: 999; width:100%; height:100%;  filter:alpha(opacity=0); left: 0px; zoom: 1; position: absolute; top: 0px;" src="javascript:false;"></iframe>'); 
}}; 
// Add our overlay div 
$j('body').prepend('<div id="overlay" />'); 
// Fade in overlay 
$j('#overlay').animate({"opacity":"0.2"}, 300), 
// Animate our modal window into view 
$j('#window').css({"top":"45%"}).pause(200).css({"opacity":"0"}).show().animate({"top": "50%", "opacity": "1"}, 300) 

    // Add our click OFF event 
    $j('a.close, #overlay').click(function() { 
    //Animate our modal window out of view 
    $j('#window').animate({"top": "55%", "opacity": "0"}, 300).fadeOut(200), 
    // Fade out and remove our overlay 
    $j('#overlay').pause(500).fadeOut(200, function() { $j(this).remove()}) 
    }); 

}); 

});

+0

是的,我實際上只是想到了這一點,並回到這裏回答我自己的問題,但你擊敗了我!乾杯。 – 2009-10-06 13:30:26

0

使用jQuery Dialog可能會容易得多。它帶有一個你可以使用的'模態'標誌。一探究竟。

+0

有一大堆現成的模式窗口我可以使用,但重點是我試圖讓我自己作爲一種學習體驗。不管怎麼說,還是要謝謝你。 – 2009-10-05 20:44:41