2009-10-05 54 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