【问题标题】:Allow popup bubble to "break out" of jQuery UI dialog允许弹出气泡“跳出”jQuery UI 对话框
【发布时间】:2015-04-22 22:58:39
【问题描述】:

在一个 jQuery UI 对话框中,我正在显示一个选项列表(复选框)。列表中的每个节点的末尾都有一个帮助图标,悬停时会在该图标上显示一个带有信息的弹出气泡。

HTML:

<div id="dialog" class="hidden">
    <ul>
        <li><input type="checkbox" name="chk1"/> <label for="chk1">Node 1</label> <img src="http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/24/Categories-system-help-icon.png" class="nodeTrigger" />
            <div class="popup hidden">
                <span class="bold">Node 1</span><br/>
                Some Long description of what Node 1 entails
            </div>
        </li>
        <li><input type="checkbox" name="chk2"/> <label for="chk2">Node 2</label> <img src="http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/24/Categories-system-help-icon.png" class="nodeTrigger" />
            <div class="popup hidden">
                <span class="bold">Node 2</span><br/>
                Some Long description of what Node 2 entails
            </div>
            <ul>
                <li>
                    <input type="checkbox" name="chk3"/> <label for="chk3">Node 3</label> <img src="http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/24/Categories-system-help-icon.png" class="nodeTrigger" />
            <div class="popup hidden">
                <span class="bold">Node 3</span><br/>
                Some Long description of what Node 3 entails
            </div>
                </li>
            </ul>
        </li>
    </ul>
</div>

CSS:

#dialog {
    position: relative;    
}

.hidden {
    display: none;
}

.bold {
    font-weight: bold;   
}

.popup {
    background-color: #dddddd;
    border: 1px solid #000000;
    width: 400px;
}

JavaScript(在 jQuery 就绪函数中):

$('img.nodeTrigger').hover(
    function(e){
        var that = $(this);
        var position = that.position();

        var popup = $(that.parent().find('div.popup').get(0));
        var top = position.top - (popup.outerHeight() / 2.0) + (that.outerHeight() / 2.0);
        var left = position.left + that.outerWidth() + 5;
        popup.stop(true, true)
        .css({ 'position': 'absolute', 'top': top, 'left': left, 'z-index': 99999 })
        .fadeIn('slow');
    },
    function(){
        var popup = $(this).parent().find('div.popup');
        popup.stop(true, true).fadeOut('slow');   
    }
);

$('#dialog-trigger').click(function(e){
    e.preventDefault();
    $('#dialog').dialog({
        width: 400,
        height: 300,
        modal: true,
        resizable: false,
        title: 'Choose some items',
        buttons: {
            'Ok': function() { $(this).dialog('close'); }   
        }
    });
});

你可以在这里看到一个基本的例子:

http://jsfiddle.net/YZpzN/6/

我的问题是我无法弄清楚如何让弹出气泡跳出对话框。显示气泡时,它包含在对话框中,从而产生滚动条。我需要它“爆发”,必要时覆盖对话框。

更新:虽然@flec 的回答解决了眼前的问题,但它并不完全适合我的需要。对话框中可能有很多选择,这意味着对话框本身可能需要一个垂直滚动条来保持其合理的大小。如果可能的话,也可以将弹出窗口替换为对话框右侧的 div(比如在 div 的右侧有一个信息框,覆盖在覆盖层上)。

【问题讨论】:

    标签: jquery html css jquery-ui jquery-ui-dialog


    【解决方案1】:

    你只需要把你的 CSS 改成这样:

    #dialog {
        position: relative;   
        overflow: visible;
    }
    

    更新小提琴:http://jsfiddle.net/YZpzN/7/

    【讨论】:

    • 太棒了.. 不过有一个问题.. 对话框中可能有很多选择,这意味着它可能需要一个垂直滚动条来保持对话框的合理大小.. 这个修复不会让这成为不可能?
    • 我想是的。 CSS3 中有一个overflow-x,但我没能开始工作。也许你可以在你的 dialog-div 中使用另一个 div。
    • 我似乎也无法让它工作。我完全愿意更改 HTML,或者如果有必要,在 div 的右侧放置一个信息框(与 div 等相同的 z-index),所以信息气泡总是在 div 之外。也许那更容易吗?
    • @MortenJacobsen 我猜你是对的。我认为您应该将 info-div 放在 dialog-div 之外。并使用position: absolute 将其置于悬停状态。
    • 我设法将信息气泡放在对话框之外,在右侧对齐。不过,如果您不需要在 div 内滚动,这个答案有效,所以我接受它。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多