在ResponsivePopover / Dialog / Popover中进行焦点处理

问题描述 投票:1回答:1

我很难理解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获得焦点(因为它会触发移动设备上的键盘)?

sapui5
1个回答
0
投票

如果目标控件具有稳定的ID,则可以将该ID分配给initialFocusResponsivePopoverDialogPopover关联,以便即使end / beginButton聚合中存在按钮,目标控件也会聚焦。

专注于弹出窗口是按照beginButtonendButton的顺序设置的。但是如果除了这两个按钮之外的控件需要获得焦点,请将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

© www.soinside.com 2019 - 2024. All rights reserved.