simpleModal中nivo-slider的问题

时间:2011-09-27 03:45:51

标签: jquery simplemodal nivo-slider

nivo-slider显示并且工作正常,我遇到的问题是,如果关闭模态窗口,然后重新打开它,则nivo滑块会被破坏。它仍停留在第一张照片上,与nivo滑块相关的所有按钮都没有响应。

有没有办法可以追加simpleModal关闭的方式,这样就不会破坏nivo-slider?

simpleModal

Nivo Slider

注意:这可能是因为nivo-slider在页面加载时运行,但是,当模态窗口关闭时,simpleModal会将其卸载,因此如果重新打开模态窗口,则无法重新加载它。 / p>

所以解决这个问题的方法可能就是改变simplemodal,这样当窗口关闭时它不会卸载它的内容,而是简单地隐藏它。问题是我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

由于没有其他人愿意回答我的问题,我通过simpleModal的源代码挖掘并自己完成。

我查看了源代码,直到找到它用来关闭模态窗口的函数,然后我查找了删除它的部分并将其更改为隐藏它们。

注意:我的修复程序不适用于在模式窗口中有用户要更改的信息的人,但对于使用该窗口获取静态信息的任何人都可以使用上午。

只需将这些更改应用于源代码:

发件人:(此代码从未修改的simpleModal 1.4.1版源的第664行开始)

// if the data came from the DOM, put it back
if (s.d.placeholder) {
    var ph = $('#simplemodal-placeholder');
    // save changes to the data?
    if (s.o.persist) {
        // insert the (possibly) modified data back into the DOM
        ph.replaceWith(s.d.data.removeClass('simplemodal-data').css('display', s.display));
    }
    else {
        // remove the current and insert the original,
        // unmodified data back into the DOM
        s.d.data.hide().remove();
        ph.replaceWith(s.d.orig);
    }
}
else {
    // otherwise, remove it
    s.d.data.hide().remove();
}

// remove the remaining elements
s.d.container.hide().remove();
s.d.overlay.hide();
s.d.iframe && s.d.iframe.hide().remove();
setTimeout(function(){
    // opera work-around
    s.d.overlay.remove();
    // reset the dialog object
    s.d = {};
}, 10);

// if the data came from the DOM, put it back
if (s.d.placeholder) {
    var ph = $('#simplemodal-placeholder');
    // save changes to the data?
    if (s.o.persist) {
        // insert the (possibly) modified data back into the DOM
        ph.replaceWith(s.d.data.removeClass('simplemodal-data').css('display', s.display));
    }
    else {
        // remove the current and insert the original,
        // unmodified data back into the DOM
        s.d.data.hide();
    }
}
else {
    // otherwise, remove it
    s.d.data.hide();
}

// remove the remaining elements
s.d.container.hide();
s.d.overlay.hide();
s.d.iframe && s.d.iframe.hide();
setTimeout(function(){
    // opera work-around
    s.d.overlay.remove();
    // reset the dialog object
    s.d = {};
}, 10);

我只更改了4行,但是现在simpleModal仅在关闭窗口时隐藏内容,它不会卸载它。

要获取simpleModal的未修改源,只需单击下面的链接即可下载。

<强> simpleModal

注意:这是完整的,未压缩的源代码,用于开发目的。完成编辑后,我建议您使用此网站压缩它:JavascriptCompressor