将焦点设置到 gwtbootstrap3 模式中的输入

Set focus to an Input in a gwtbootstrap3 Modal

我想在对话框 (org.gwtbootstrap3.client.ui.Modal) 出现之前将焦点设置到对话框 (org.gwtbootstrap3.client.ui.Input) 中的某个字段。这个用例似乎很常见,如果你有一个像 Upload textAdd feed dialogs right here. However I could not figure out how to set the focus to this particular gwtbootstrap3 组件这样的单个字段的对话框.

Input 组件确实有一个 setFocus(true) 方法。我认为在显示对话框之前设置焦点是行不通的,但事实并非如此。所以合乎逻辑的解决方案是将方法调用放在 ScheduledCommand 中。像这样:

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        textField.setFocus(true);
    }

});

这通常适用于 GWT 标准组件,但在这种情况下似乎没有帮助。我找到了一种在通过 ModalShowHandler 显示对话框后获得通知的方法。像这样:

modal.addShowHandler(new ModalShowHandler() {

    @Override
    public void onShow(ModalShowEvent evt) {
        textField.setFocus(true);
    }

});

我什至尝试将两者结合起来,向句柄添加延迟调用。没有运气。有什么想法吗?

您应该在 ModalShownEvent 上收听(注意:Shown,而不是 Show)。

ModalShowEvent请求(例如,以编程方式)显示模态时触发。

ModalShownEvent 在模式实际显示时触发。

这个有点混乱的命名是基于原生Bootstrap Modal's events的事件:show.bs.modalshown.bs.modal

ModalShownEvent 结合通常的 Scheduler#scheduleDeferred 应该可以解决问题。