我对 GWT 有这个问题:我需要从焦点循环中跳过一个按钮,所以我使用 button.setTabIndex(-1) 将选项卡索引设置为 -1,但是在生成的 html 中我得到 tabindex="0"...这是一个错误吗?
4 回答
看起来它是故意的: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所以我很惊讶你第一个报告它(据我所知),但它对我来说确实像是一个错误。
似乎不可能有一个负的 tabindex。
起初,setTabIndex
say 的文档:
设置小部件在选项卡索引中的位置。如果多个小部件具有相同的选项卡索引,则每个此类小部件将以任意顺序获得焦点。将选项卡索引设置为 -1 将导致此小部件从选项卡顺序中删除。
w3c 说:
用户代理应该根据以下规则导航可能获得焦点的元素:
那些支持 tabindex 属性并为其分配正值的元素首先被导航。导航从具有最低 tabindex 值的元素继续到具有最高值的元素。值不必是连续的,也不必以任何特定值开头。具有相同 tabindex 值的元素应该按照它们在字符流中出现的顺序进行导航。
接下来导航那些不支持 tabindex 属性或支持它并为其分配值“0”的元素。这些元素按照它们在字符流中出现的顺序进行导航。
禁用的元素不参与跳位顺序。
资料来源: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 。
我希望对你有所帮助。
与 setFocus 一样,使用 deferred:
Scheduler.get().scheduleDeferred(new Command() {
@Override
public void execute() {
cb.setTabIndex(-1);
}
});
在我的情况下,cb = CheckBox()
与 jsni 合作。例如:
public static native void setElementTabIndex(Element b, int ti)/*-{
b.tabIndex = ti;
}-*/;
//and call the native js function
setElementTabIndex(odButton.getElement(), -1);