我很难理解SAPUI5中的自动焦点处理以及如何更改其默认行为:
假设我有一个带有SearchField的ResponsivePopover。当我打开popover时,SearchField会自动聚焦。
但是当有一个带有Button的<endButton>
聚合时,它会获得焦点。
试试这里:JSbin: Focus in ResponsivePopover
function showPopover(oEvent) {
var oRespPopover = new ResponsivePopover({
showHeader: true,
title: "title",
content: [
new SearchField(),
// ...
],
/*
endButton: new sap.m.Button({
text: 'close',
press: function(oEvent) {
oRespPopover.close();
}
}),
*/
afterClose: function(oEvent) {
oEvent.getSource().destroy();
}
});
oRespPopover.openBy(oBtn);
};
在哪里定义哪个Control获得焦点,我该如何改变这种行为?我在这个主题上检查了Implementing Focus Handling documentation,但没有成功。
如何在不进行EndButton聚合的情况下阻止SearchField获得焦点(因为它会触发移动设备上的键盘)?
如果目标控件具有稳定的ID,则可以将该ID分配给initialFocus
,ResponsivePopover
或Dialog
的Popover
关联,以便即使end
/ beginButton
聚合中存在按钮,目标控件也会聚焦。
专注于弹出窗口是按照
beginButton
和endButton
的顺序设置的。但是如果除了这两个按钮之外的控件需要获得焦点,请将initialFocus
设置为应该关注的控件。 src
在XML中:
initialFocus="myId">
<content>
<SomeControl id="myId" />
</content>
或者在JS(Controller)中:
// ...
title: "title",
initialFocus: this.getView().createId("myId"),
content: [
new SomeControl({
id: this.getView().createId("myId"),
}),
// ...
注意:对于移动设备,初始焦点不会触发打开屏幕键盘。
将
initialFocus
设置为输入控件不会打开移动设备上的屏幕键盘,因为由于浏览器的限制,无法使用JavaScript代码打开屏幕键盘。必须通过真实的用户操作触发屏幕键盘的打开。 src