jquery simplemodal动态高度

时间:2009-09-10 18:55:50

标签: jquery jquery-plugins simplemodal

我在jquery中使用了simplemodal popup,我想根据我的内容动态设置弹出窗口的高度。目前,它固定为500.如果我删除高度属性,它第一次工作,但如果内容增长,那么高度不会自行调整(我的弹出窗口中有标签,每个标签加载不同的内容)

$("#popup").modal({
        containerCss: {
            width: 550,
            height: 500
        },

14 个答案:

答案 0 :(得分:19)

我可以通过将此函数添加到onShow的最后一行来获得动态高度(仅在chrome和ff上测试):

$('#simplemodal-container').css('height', 'auto');

希望这可以提供帮助。如果您指定 containerId ,则应将'#simplemodal-container'替换为containerId。

答案 1 :(得分:12)

这里的一些解决方案的难度,即设置高度自动,是你失去了simplemodal的好行为,以保持模态小于当前窗口大小(例如,通过将maxHeight设置为90%)。

我提出了以下解决方案:

 $.modal.defaults.onShow = function(dialog) {
   if (!dialog) dialog = $.modal.impl.d
   dialog.container.css('height', 'auto');
   dialog.origHeight = 0;
   $.modal.setContainerDimensions();
   $.modal.setPosition();
  }

这一点的本质是,一旦在活动模态上运行setContainerDimensions,即使显式调用setContainerDimensions,如果你引入新内容也不会重新计算它们。我在这里做的是绕过记住的高度并强制重新计算。

每次更改内容(ajax调用,标签更改等)时,您都必须调用$ .modal.defaults.onShow,但您可以保留autoResize和autoPosition功能,同时避免不必要的滚动条。

答案 2 :(得分:7)

我结合了Sahat和Tommy的答案来获得这个更短的版本。我在Firefox中测试了它并且它可以工作:

$.modal("<p>yourContent</p>", { onShow: function(dlg) {
    $(dlg.container).css('height','auto')
}});

答案 3 :(得分:5)

将它放在你的css文件中:

.simplemodal-container
{
    height:auto !important;
}

答案 4 :(得分:3)

SimpleModal没有内置功能,可在内容更改时调整高度/宽度。这是你必须添加的东西。

答案 5 :(得分:2)

这是我的解决方案:

var activeModal;
$.extend($.modal.defaults, {
    onShow: function(dialog) {
        activeModal = dialog;
        dialog.container.css('height', 'auto');
    }
});
function showModal() { // Creates a modal
    $.modal("#aModal");
}
...
function changeModalContent() { // A function that changes the modal content
    ...
    // After changing the content, do this:
    $.modal.update(activeModal.data.css('height'), 'auto');
}

我在FF,Chrome,Safari和Opera上测试过它。

希望它也适合你......

问候!

答案 6 :(得分:1)

离开高度默认为自动高度。如果你破坏对话框然后立即重新创建它,自动高度应该基本上为你调整大小。这是一个黑客工作,但可能比尝试手动计算适当的高度更容易。在对话框中有一个自动调整大小的选项会更好......

答案 7 :(得分:1)

我能够通过记忆传递给onShow事件处理程序的dialog参数来实现这一点,然后当一些后来的事件导致内容发生变化时,操纵dialog.container的css height属性:

<script type="text/javascript">
var walkInDlg;
function doModal()  { // called from onClick of some button on the page
    jQuery.modal("#aModal", { height:"auto",
        width:500,
        backgroundColor:"#807c68",
        overlay:75,
        onShow: function(dlg) { walkInDlg = dlg },
        onClose: function(dlg) { walkInDlg = undefined; jQuery.modal.close() },
        containerCss:{border:"0",padding:"0"}
    })
}
</script>

...

// somewhere else in the page
// this is in the event handler for an action that
// adds content to the dialog

...
// after adding the content, do this:
jQuery(walkInDlg.container).css('height', 'auto')

目睹了这项技术在Chrome和Firefox中运行。

答案 8 :(得分:0)

var h = $(your_content_element).css('height');

$("#popup").modal({
        containerCss: {
            width: 550,
            height: h
        },

然后你必须找到一种方法,当你触发模态时,脚本会再次计算高度。

答案 9 :(得分:0)

以下是我的工作:

    $.extend($.modal.defaults, {
    closeClass: "close",
    closeHTML: "<a></a>",
    minWidth: 400,
    minHeight: 200,
    maxWidth: 780,
    maxHeight: 580,
    onShow: function (dialog) {
        dialog.container.css("height", "auto");
    }
});

答案 10 :(得分:0)

基于dmnc的回答,我能够通过在容器fadeIn的回调中将代码添加到onOpen函数来实现这一点。

内容渲染时会有一些位置跳跃,但它现在可以完美地重新调整和重新定位。

$('#target').modal({
    overlayClose: true,
    onOpen: function (dialog) {
        dialog.overlay.fadeIn('fast', function(){
            dialog.data.hide();
            dialog.container.fadeIn('fast', function(){
                dialog.data.fadeIn('fast');

                // where the magic happens
                dialog.container.css('height', 'auto');
                dialog.origHeight = 0;
                $.modal.setContainerDimensions();
                $.modal.setPosition();
            });
        });
    },
    onClose: function (dialog) { ... }
});

答案 11 :(得分:0)

这是一种动态调整Eric Martins Simple Modal高度和/或宽度的简单方法。我只是在点击'.something'后打电话打开一个模态。我测量窗口高度/宽度并减去(px或div(高度))。然后我用动态创建的变量设置宽度/高度

    $('.something ').click(function() {
        //Dynamically Get Height/Width of the Window
        var wh = $(window).height() - 100 
        var ww = $(window).width() - 100 
           //Can subtract other divs heights if wanted
           //var dh = $('#exampleDiv').height();
           //dh = ( wh - dh );    
        $('#modalThis').modal({
            containerCss : {                
                height : wh,
           //or height : dh             
                width : ww

            },
        });
    });

答案 12 :(得分:0)

.modal({
   autoResize:true,
   maxHeight: $(window).height(),                
   minHeight: $(window).height() - 100               
});

答案 13 :(得分:-2)

在jquery.simplemodal.js中,覆盖

containerCss:{}

这一个:

containerCss:{width: 650}

更改css图像的顶部和底部gif文件。

作者:Arman de Guzman de Castro: - )