我試圖以編程方式將dgrid行設置爲活動,而不僅僅是選定。我有一個使用Selection
和Keyboard
Mixins的dojo dgrid OnDemandList
。以編程方式將dgrid行設置爲活動
使用select(row)
方法我可以編程選擇給定的行,但該行不活躍。當一行是活動,我可以使用向上和向下箭頭鍵導航到它上面和下面的行。當一行只是選中,該行將突出顯示,但箭頭鍵不起作用。
單擊行用鼠標將使其活躍和選擇,但我試圖建立我的界面是100%使用只用鍵盤。
我試圖以編程方式將dgrid行設置爲活動,而不僅僅是選定。我有一個使用Selection
和Keyboard
Mixins的dojo dgrid OnDemandList
。以編程方式將dgrid行設置爲活動
使用select(row)
方法我可以編程選擇給定的行,但該行不活躍。當一行是活動,我可以使用向上和向下箭頭鍵導航到它上面和下面的行。當一行只是選中,該行將突出顯示,但箭頭鍵不起作用。
單擊行用鼠標將使其活躍和選擇,但我試圖建立我的界面是100%使用只用鍵盤。
好的,花了我一段時間,但明白了。我真正想要做的是將焦點添加到一行中。用於這樣做的代碼在_focusOnNode
方法下的dgrid/Keyboard.js
中。
的實際代碼從currentFocusedNode
行焦點更改排focusedNode
是:
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"
和"put-selector/put"
第一以及如定義currentFocusedNode
和focusedNode
。但我離開那個作爲練習讀者;-)
另外請注意,這只是改變了「焦點」,也不會選擇focusedNode
但可以很容易地用做grid.select(focusedNode);