1

我正在尝试以编程方式将 dgrid 行设置为active,而不仅仅是selected。我有一个OnDemandList使用Selection和Mixins 的 dojo dgrid Keyboard

使用该select(row)方法,我可以以编程方式选择给定行,但该行未激活。当一行处于活动状态时,我可以使用向上和向下箭头键导航到其上方和下方的行。刚选中一行时,该行高亮显示,但箭头键不起作用。

用鼠标单击该行将使其处于活动状态并被选中,但我正在尝试将我的界面构建为仅使用键盘即可 100% 使用。

4

1 回答 1

1

好的,花了我一段时间,但弄明白了。我真正想做的是将焦点添加到一行中。这样做的代码在dgrid/Keyboard.js方法下_focusOnNode

将焦点从一行更改为另一行的实际代码currentFocusedNodefocusedNode

if(currentFocusedNode){
    // Clean up previously-focused element
    // Remove the class name and the tabIndex attribute
    put(currentFocusedNode, "!dgrid-focus[!tabIndex]");
    if(has("ie") < 8){
        // Clean up after workaround below (for non-input cases)
        currentFocusedNode.style.position = "";
    }
}

if(has("ie") < 8){
    // setting the position to relative magically makes the outline
    // work properly for focusing later on with old IE.
    // (can't be done a priori with CSS or screws up the entire table)
    focusedNode.style.position = "relative";
}
focusedNode.tabIndex = grid.tabIndex;
focusedNode.focus();
put(focusedNode, ".dgrid-focus");

上面的代码实际上只是一个代码片段,要使其工作,您必须先声明"dojo/has"and"put-selector/put"并定义currentFocusedNodeand focusedNode。但我把它作为练习留给读者;-)

另请注意,这只会改变“焦点”,它不会选择focusedNode但可以使用轻松完成grid.select(focusedNode);

于 2013-09-21T02:04:56.733 回答