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

时间:2017-10-03 14:52:03

标签: sapui5

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

1 个答案:

答案 0 :(得分:0)

如果目标控件具有稳定ID,您可以将该ID分配给ResponsivePopoverDialogPopover的{​​{3}}关联,以便目标控件即使end / beginButton聚合中有按钮,也会聚焦。

  

如果可用,则按beginButtonendButton的顺序设置对弹出窗口的关注。但是,如果除了这两个按钮之外的控件需要获得焦点,请将initialFocus设置为应该关注的控件。 initialFocus

在XML中:

initialFocus="myId">
<content>
  <SomeControl id="myId" />
</content>

或在JS(控制器)中:

// ...
title: "title",
initialFocus: this.getView().createId("myId"),
content: [
  new SomeControl({
    id: this.getView().createId("myId"),
  }),
// ...

注意:对于移动设备,初始焦点不会触发打开屏幕键盘。

  

initialFocus设置为输入控件不会打开移动设备上的屏幕键盘,因为浏览器限制,无法使用JavaScript代码打开屏幕键盘。屏幕键盘的打开必须由真实用户操作触发。 src