2

我对 GWT 有这个问题:我需要从焦点循环中跳过一个按钮,所以我使用 button.setTabIndex(-1) 将选项卡索引设置为 -1,但是在生成的 html 中我得到 tabindex="0"...这是一个错误吗?

4

4 回答 4

3

看起来它是故意的:FocusWidget将标签索引设置为-1时将其onAttach重置为0 : https ://gwt.googlesource.com/gwt/+/2.5.1/user/src/com/google /gwt/user/client/ui/FocusWidget.javaonAttach

这种行为可以追溯到 3.5 年前(在 GWT 2.1.0 中发布):https ://code.google.com/p/google-web-toolkit/source/detail?r=7642所以我很惊讶你第一个报告它(据我所知),但它对我来说确实像是一个错误。

于 2013-08-27T08:45:46.343 回答
2

似乎不可能有一个负的 tabindex。

起初,setTabIndexsay 的文档:

设置小部件在选项卡索引中的位置。如果多个小部件具有相同的选项卡索引,则每个此类小部件将以任意顺序获得焦点。将选项卡索引设置为 -1 将导致此小部件从选项卡顺序中删除。

w3c 说:

用户代理应该根据以下规则导航可能获得焦点的元素:

  1. 那些支持 tabindex 属性并为其分配正值的元素首先被导航。导航从具有最低 tabindex 值的元素继续到具有最高值的元素。值不必是连续的,也不必以任何特定值开头。具有相同 tabindex 值的元素应该按照它们在字符流中出现的顺序进行导航。

  2. 接下来导航那些不支持 tabindex 属性或支持它并为其分配值“0”的元素。这些元素按照它们在字符流中出现的顺序进行导航。

  3. 禁用的元素不参与跳位顺序。

资料来源:http ://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#adef-tabindex

但是如果你想跳过你的按钮,试着设置 tabindex < -1。例子 :

Button myButton = new Button("Hello");
myButton.setTabIndex(-2);
// "-1" is convert to 0, and the button is not skipped

我尝试myButton.setTabIndex(-1);and myButton.getElement.setAttribute("tabindex", "-1"),那总是在 html 中转换为 0 。

我希望对你有所帮助。

于 2013-05-27T13:26:28.487 回答
0

与 setFocus 一样,使用 deferred:

  Scheduler.get().scheduleDeferred(new Command() {
            @Override
            public void execute() {
                cb.setTabIndex(-1);
            }
  });

在我的情况下,cb = CheckBox()

于 2015-12-02T05:49:00.663 回答
0

与 jsni 合作。例如:

public static native void setElementTabIndex(Element b, int ti)/*-{
        b.tabIndex = ti;
     }-*/;

//and call the native js function
setElementTabIndex(odButton.getElement(), -1);
于 2015-10-18T15:40:58.027 回答