Javascript Internet Explorer中的jQuery模式窗口关闭不正确
关于jQuery模式窗口,我遇到了一些问题。我是一名dba和SQL程序员,我的目标是建立一个查询,动态构建一个HTML,其中包含一个flash链接到一个模式窗口,该窗口中有另一个flash。很好,查询已经完成,并且工作完美无瑕。但是,我在Internet Explorer上试用过它(与firefox和chrome不同),当您想关闭模式窗口时,它会关闭整个浏览器窗口(带有警告消息,上面写着“当心,浏览器正在尝试关闭此选项卡等”) 我使用了一个已经存在的jquery模式窗口代码和样式(我相信这两者都很重要)。问题是,整个查询都完成了,如果我更改整个jquery模式窗口,我将不得不彻底更改查询的逻辑(相信我,我已经检查过了) 因此,我最快的解决方案是更正jQuery代码,它会把整个关闭过程搞得一团糟(更改sql存储过程需要大量工作)。这是因为我用作参考的原始示例有这个问题(我只是没有注意到,因为jQuery假设是一个跨浏览器的解决方案)。你会发现它在FF和Chrome上完美地工作,但在IE上却不完美 以下是链接: 非常感谢 以防我也在这里发布代码:Javascript Internet Explorer中的jQuery模式窗口关闭不正确,javascript,jquery,Javascript,Jquery,关于jQuery模式窗口,我遇到了一些问题。我是一名dba和SQL程序员,我的目标是建立一个查询,动态构建一个HTML,其中包含一个flash链接到一个模式窗口,该窗口中有另一个flash。很好,查询已经完成,并且工作完美无瑕。但是,我在Internet Explorer上试用过它(与firefox和chrome不同),当您想关闭模式窗口时,它会关闭整个浏览器窗口(带有警告消息,上面写着“当心,浏览器正在尝试关闭此选项卡等”) 我使用了一个已经存在的jquery模式窗口代码和样式(我相信这两者都
/// <reference path="jquery-1.3.2.min-vsdoc.js" />
/************************************************************************************************************
* SIMPLE MODAL v 2.0
* © 2009 FISHBOWL MEDIA LLC
* http://fishbowlmedia.com
***********************************************************************************************************/
(function ($) {
/**********************************
* CUSTOMIZE THE DEFAULT SETTINGS
* Ex:
* var _settings = {
* id: 'modal',
* src: function(sender){
* return jQuery(sender).attr('href');
* },
* width: 800,
* height: 600
* }
**********************************/
var _settings = {
width: 800, // Use this value if not set in CSS or HTML
height: 600, // Use this value if not set in CSS or HTML
overlayOpacity: .85, // Use this value if not set in CSS or HTML
id: 'modal',
src: function (sender) {
return jQuery(sender).attr('href');
},
fadeInSpeed: 0,
fadeOutSpeed: 0
}
/**********************************
* DO NOT CUSTOMIZE BELOW THIS LINE
**********************************/
$.modal = function (options) {
return _modal(this, options);
}
$.modal.open = function () {
_modal.open();
}
$.modal.close = function () {
_modal.close();
}
$.fn.modal = function (options) {
return _modal(this, options);
}
_modal = function (sender, params) {
this.options = {
parent: null,
overlayOpacity: null,
id: null,
content: null,
width: null,
height: null,
modalClassName: null,
imageClassName: null,
closeClassName: null,
overlayClassName: null,
src: null
}
this.options = $.extend({}, options, _defaults);
this.options = $.extend({}, options, _settings);
this.options = $.extend({}, options, params);
this.close = function () {
jQuery('.' + options.modalClassName + ', .' + options.overlayClassName).fadeOut(_settings.fadeOutSpeed, function () { jQuery(this).unbind().remove(); });
}
this.open = function () {
if (typeof options.src == 'function') {
options.src = options.src(sender)
} else {
options.src = options.src || _defaults.src(sender);
}
var fileExt = /^.+\.((jpg)|(gif)|(jpeg)|(png)|(jpg))$/i;
var contentHTML = '';
if (fileExt.test(options.src)) {
contentHTML = '<div class="' + options.imageClassName + '"><img src="' + options.src + '"/></div>';
} else {
contentHTML = '<iframe width="' + options.width + '" height="' + options.height + '" frameborder="0" scrolling="no" allowtransparency="true" src="' + options.src + '"></iframe>';
}
options.content = options.content || contentHTML;
if (jQuery('.' + options.modalClassName).length && jQuery('.' + options.overlayClassName).length) {
jQuery('.' + options.modalClassName).html(options.content);
} else {
$overlay = jQuery((_isIE6()) ? '<iframe src="BLOCKED SCRIPT\'<html></html>\';" scrolling="no" frameborder="0" class="' + options.overlayClassName + '"></iframe><div class="' + options.overlayClassName + '"></div>' : '<div class="' + options.overlayClassName + '"></div>');
$overlay.hide().appendTo(options.parent);
$modal = jQuery('<div id="' + options.id + '" class="' + options.modalClassName + '" style="width:' + options.width + 'px; height:' + options.height + 'px; margin-top:-' + (options.height / 2) + 'px; margin-left:-' + (options.width / 2) + 'px;">' + options.content + '</div>');
$modal.hide().appendTo(options.parent);
$close = jQuery('<a class="' + options.closeClassName + '"></a>');
$close.appendTo($modal);
var overlayOpacity = _getOpacity($overlay.not('iframe')) || options.overlayOpacity;
$overlay.fadeTo(0, 0).show().not('iframe').fadeTo(_settings.fadeInSpeed, overlayOpacity);
$modal.fadeIn(_settings.fadeInSpeed);
$close.click(function () { jQuery.modal().close(); });
$overlay.click(function () { jQuery.modal().close(); });
}
}
return this;
}
_isIE6 = function () {
if (document.all && document.getElementById) {
if (document.compatMode && !window.XMLHttpRequest) {
return true;
}
}
return false;
}
_getOpacity = function (sender) {
$sender = jQuery(sender);
opacity = $sender.css('opacity');
filter = $sender.css('filter');
if (filter.indexOf("opacity=") >= 0) {
return parseFloat(filter.match(/opacity=([^)]*)/)[1]) / 100;
}
else if (opacity != '') {
return opacity;
}
return '';
}
_defaults = {
parent: 'body',
overlayOpacity: 85,
id: 'modal',
content: null,
width: 800,
height: 600,
modalClassName: 'modal-window',
imageClassName: 'modal-image',
closeClassName: 'close-window',
overlayClassName: 'modal-overlay',
src: function (sender) {
return jQuery(sender).attr('href');
}
}
})(jQuery);
提前感谢大家=-)
编辑:Daniele建议问题可能出在这一行:
jQuery('.' + options.modalClassName + ', .' + options.overlayClassName).fadeOut(_settings.fadeOutSpeed, function () { jQuery(this).unbind().remove(); });
我按照他的建议做了,结果是:它在IE上仍然不起作用(这意味着它仍然要求关闭整个窗口,而不仅仅是模态),并且在FF和chrome中正确地显示和关闭第一个模态,但是在关闭第一个模态后,它无法正确地显示另一个模态
将模态的close()方法替换为closeModal或类似方法:
$.modal.closeModal = function () {
_modal.closeModal();
}
[……]
[……]
对我来说,它是有效的…用closeModal或类似的东西替换modal的close()方法:
$.modal.closeModal = function () {
_modal.closeModal();
}
[……]
[……]
对我来说,它是有效的…不幸的是,现在我没有时间去做它,所以请快速回答。问题可能出在这一行
jQuery('.+options.modalClassName+',.+options.overlyClassName.).fadeOut(_settings.fadeOutSpeed,function(){jQuery(this).unbind().remove();})代码>做一些实验,例如删除jQuery(this).unbind().remove()对不起,我现在帮不了你更多的忙。如果修改后有什么变化,请告诉我。不幸的是,现在我没有时间处理它,所以请快速回答。问题可能出在这一行jQuery('.+options.modalClassName+',.+options.overlyClassName.).fadeOut(_settings.fadeOutSpeed,function(){jQuery(this).unbind().remove();})代码>做一些实验,例如删除jQuery(this).unbind().remove()对不起,我现在帮不了你更多的忙。如果修改后有什么变化,请告诉我。就是这样!?!?你在开玩笑!先生,你真是太棒了,应该得到公认的答案,向上投票,和50%的声誉=-)就是这样!?!?你在开玩笑!先生,你真是太棒了,应该得到公认的答案、投票权和50%的声誉=-)
this.closeModal = function () {
jQuery('.' + options.modalClassName + ', .' + options.overlayClassName).fadeOut(_settings.fadeOutSpeed, function () { jQuery(this).unbind().remove(); });
}
$close.click(function () { jQuery.modal().closeModal(); });
$overlay.click(function () { jQuery.modal().closeModal(); });