2013-07-23 75 views
1

我試圖以編程方式將dgrid行設置爲活動,而不僅僅是選定。我有一個使用SelectionKeyboard Mixins的dojo dgrid OnDemandList以編程方式將dgrid行設置爲活動

使用select(row)方法我可以編程選擇給定的行,但該行不活躍。當一行是活動,我可以使用向上和向下箭頭鍵導航到它上面和下面的行。當一行只是選中,該行將突出顯示,但箭頭鍵不起作用。

單擊行用鼠標將使其活躍選擇,但我試圖建立我的界面是100%使用只用鍵盤。

回答

1

好的,花了我一段時間,但明白了。我真正想要做的是將焦點添加到一行中。用於這樣做的代碼在_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"第一以及如定義currentFocusedNodefocusedNode。但我離開那個作爲練習讀者;-)

另外請注意,這只是改變了「焦點」,也不會選擇focusedNode但可以很容易地用做grid.select(focusedNode);

相關問題