【问题标题】:Large bootsrap dialog from extlib focus on the bottom来自 extlib 的大型引导对话框集中在底部
【发布时间】:2015-06-18 10:36:47
【问题描述】:

我有一个来自 ExtLib 的对话框,我使用了 boostrap 配置。 当对话框打开时,焦点在对话框的底部。如果对话框大于屏幕,我看不到对话框的顶部,我必须滚动。这不是我想要的。 有解决方案吗?在我的对话框中只有计算值。

编辑: 这是一个例子。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex"
    xmlns:xc="http://www.ibm.com/xsp/custom">
    <style type="text/css">
        .bgSizeCover {
            height: 300px;
            width: 300px;
            background-size: cover;
            background-position: center center
        }
        .txtpos {
            width: 100%;
            height: 70px;
            position: absolute;
            bottom: 0px;
            left: 0;
            background: rgba(245,245,245,0.75);
        }
        /*modal*/
        .modal-dialog {
          width: 90%;
          margin-left: -250px;
        }
        .modal-content {
          width: 95%;
        }
    </style>
    <xp:div>
        <xp:this.styleClass>
            <![CDATA[#{javascript:
                var grid = "col-xs-12 col-sm-12 col-md-12 col-lg-12";
                return "overflow-ellipsis " + grid;}]]>
        </xp:this.styleClass>
        <xp:this.style><![CDATA[#{javascript:"min-width: 250px"}]]></xp:this.style>
        <xp:panel
            tagName="a"
            id="datarow"
            styleClass="list-group-item bgSizeCover">
            <xp:this.attrs>
                <xp:attr name="onclick">
                    <xp:this.value>
                        <![CDATA[XSP.openDialog("#{id:dialog1}");]]>
                    </xp:this.value>
                </xp:attr>
            </xp:this.attrs>
            <xp:this.style>
                <![CDATA[#{javascript:
                    "background-image: url('http://placehold.it/640x640/')"
                }]]>
            </xp:this.style>
            <div class="txtpos">
                <xp:text
                    id="label"
                    tagName="h4"
                    style="padding-right:7px">
                    <xp:this.value><![CDATA[#{javascript:"Title"}]]></xp:this.value>
                </xp:text>
                <xp:text
                    tagName="p"
                    id="computedField1"
                    styleClass="rowDetails">
                    <xp:this.value>
                        <![CDATA[#{javascript:"Number"}]]>
                    </xp:this.value>
                </xp:text>
            </div>
        </xp:panel>
    </xp:div>
    <xe:dialog
        id="dialog1"
        styleClass="modal-dialog"
        title="Title"
        tooltip="Modal">
        <xe:dialogContent
            id="dialogContent1"
            style="modal-content">
            <xp:div style="text-align:left;font-weight:bold;color:rgb(3,124,194)">
                <xp:text
                    escape="true"
                    id="computedField14"
                    value="Projekt">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left">
                <xp:text
                    escape="true"
                    id="computedField15"
                    value="Name">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left;font-weight:bold;color:rgb(3,124,194)">
                <xp:text
                    escape="true"
                    id="computedField4"
                    value="Auftraggeber">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left">
                <xp:text
                    escape="true"
                    id="computedField5"
                    value="RefBPRefSheet">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left;font-weight:bold;color:rgb(3,124,194)">
                <xp:text
                    escape="true"
                    id="computedField6"
                    value="Leistungszeitraum">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left">
                <xp:text
                    escape="true"
                    id="computedField7"
                    value="RefVestingPeriod">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left;font-weight:bold;color:rgb(3,124,194)">
                <xp:text
                    escape="true"
                    id="computedField8"
                    value="Projektvolumen">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left">
                <xp:text
                    escape="true"
                    id="computedField9"
                    value="RefProjVolumeString">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left;font-weight:bold;color:rgb(3,124,194)">
                <xp:text
                    escape="true"
                    id="computedField10"
                    value="Projektbeschreibung">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left">
                <xp:text
                    escape="true"
                    id="computedField11"
                    value="RefProjDescriptRefSheet">
                </xp:text>
            </xp:div>

            <xp:div style="text-align:left;font-weight:bold;color:rgb(3,124,194)">
                <xp:text
                    escape="true"
                    id="computedField12"
                    value="Ingenieurleistungen">
                </xp:text>
            </xp:div>
            <xp:div style="text-align:left">
                <xp:text
                    escape="true"
                    id="computedField13"
                    value="RefServicesRefSheet">
                </xp:text>
            </xp:div>

            <xp:image
                styleClass="img-rounded"
                url="http://placehold.it/640x640/"
                id="personpic">
            </xp:image>
        </xe:dialogContent>
        <xe:dialogButtonBar id="dialogButtonBar1">
            <xp:button
                value="Schließen"
                id="buttonClose"
                styleClass="btn btn-default">
                <xp:eventHandler
                    event="onclick"
                    submit="true"
                    refreshMode="partial"
                    refreshId="dialog1">
                    <xp:this.action>
                        <![CDATA[#{javascript:getComponent("dialog1").hide()}]]>
                    </xp:this.action>
                </xp:eventHandler>
                <i class="glyphicon glyphicon-remove" />
            </xp:button>
        </xe:dialogButtonBar>
    </xe:dialog>
</xp:view>

【问题讨论】:

  • 您能否提供一个简单的代码示例来重现该问题?问题有点模糊

标签: twitter-bootstrap modal-dialog xpages xpages-extlib


【解决方案1】:

ExtLib 中的对话框使用 Dojo。即使您启用了 Bootstrap 主题:它仍然是一个 Dojo 对话框,只是 CSS(和一些 HTML)不同,使其具有 Bootstrap 外观。

默认情况下,Dojo 对话框将焦点设置在它在对话框中找到的第一个可聚焦元素上:这是一个可访问性功能。根据您的内容,可以是一直位于底部的按钮。

要更改(禁用)这种有时不受欢迎的行为,您可以将 autofocus Dojo 属性设置为 false

<xe:dialog
    id="dialog1">

    <xe:this.dojoAttributes>
        <xp:dojoAttribute
            name="autofocus"
            value="false">
        </xp:dojoAttribute>
    </xe:this.dojoAttributes>

   ....

【讨论】:

  • 这就是我正在寻找的。谢谢!
【解决方案2】:

引导模式对话框将自动将焦点放在它在对话框中找到的第一个可以获取焦点的元素上。在您的示例中,唯一可以关注的是底部的按钮。如果您在顶部有另一个控件,例如能够获得焦点的输入或按​​钮,那么它将首先获得焦点,您会看到对话框内容的顶部。

您可以做的是将属性tabindex="-1" 添加到您的底部按钮。因此,对话框中的任何内容都无法获得焦点,因此在打开对话框时它仍位于顶部。但是,这可能会产生不良影响,因为您不能再按 Tab 键了。

您可以考虑挂钩对话框的shown.bs.modal 事件,并在那里将焦点发送到其他地方,例如this example。有关模态事件的信息,请参阅bootstrap doc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2018-12-12
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多