我有来自ExtLib的对话框,我使用了boostrap konfiguration。 当对话框打开时,焦点位于对话框的底部。如果对话框大于屏幕,我看不到对话框的顶部,我必须滚动。这不是我想要的。 有解决方案吗?在我的对话框中只有计算值。
编辑: 这是一个例子。
<?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>
答案 0 :(得分:3)
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>
....
答案 1 :(得分:1)
引导模式对话框将自动将焦点放在它可以获得焦点的对话框中找到的第一个元素上。在您的示例中,唯一可以关注的是底部的按钮。如果你在顶部有另一个控件,比如一个能够获得焦点的输入或按钮,那么这将首先获得焦点,你会看到对话框内容的顶部。
您可以做的是将属性tabindex="-1"
添加到底部按钮。因此,对话框中的任何内容都无法获得焦点,因此在打开对话框时它仍然位于顶部。但是,这可能会产生不良影响,因为您无法再单击按钮。
您可以查看挂钩对话框的shown.bs.modal
事件,然后将焦点发送到其他位置,例如this example。有关模态事件的信息,请参阅bootstrap doc。