2013-05-18 2 views

ответ

3

вы можете использовать модуль Dijit/фокус, чтобы выяснить фокусировку

ИЗ DOJO DOCS

отслеживания активных виджетов

В любой момент времени существует множество (из-за отсутствия лучшего слова) «активные» или «сфокусированные» виджеты, что означает теперь сфокусированный виджет и предки этого виджетов. «Предки» могут означать либо DOM ancestor (например: TextBox -> Form), либо логическое соотношение родитель-потомок (например: TooltipDialog -> DropDownButton).

Например, если фокус находится на TextBox внутри TabContainer внутри TooltipDialog, вызванного DropDownButton, стек будет TextBox -> ContentPane -> TabContainer -> TooltipDialog -> DropDownButton.

activeStack [] параметр указывает этот набор виджетов и приложение может отслеживать изменения в activeStack [] по:

require([ "dijit/focus" ], function(focusUtil){ 
focusUtil.watch("activeStack", function(name, oldValue, newValue){ 
    console.log("Focused widget + ancestors: ", newValue.join(", ")); 
}); 
}); 
+0

, но используя это, как я могу проверить, имеет ли мой пользовательский виджет фокус? –

+0

, пожалуйста, приведи пример. –

3

вопрос в названии имеет другой ответ, чем тот, в описаниях.

Есть два пути достижения вопроса в названии, используя dojo's focusUtil («dijit/focus»). оба способа дают вам что-то, что вы могли бы найти в нем виджета и реестр dijit («dijit/registry»).

  1. focusUtil.curNode: дает DOM узел, который в настоящее время имеет фокус. ниже, вы можете получить ссылку на виджет.

    function getWidgetByNode(node){ 
        var result; 
        while (!result && node){ 
         result = registry.byNode(node); 
         if (node.parentElement) 
          node = node.parentElement; 
         else 
          node = null; 
        } 
        return result; 
    } 
    var focusedWidget = getWidgetByNode(focusUtil.curNode) 
    
  2. focusUtil.activeStack: дает множество виджетов (родителя к ребенку), который имеет фокус. поэтому последний элемент массива - это прямой виджет, который имеет фокус.значения индекса Идентификаторы виджетов, так что вы должны получить виджет следующего кода

    var focusedWidgetId = focusUtil.activeStack[focusUtil.activeStack.length-1]; 
    var focusedWidget = registry.byId(focusedWidgetId); 
    

теперь, если вы хотите знать, если внимание в настоящее время виджет некоторые конкретные один, это зависит от того, что вы имеете в руках из этого конкретного виджета:

  1. сам виджет: как возвращаемых значений указанных выше образцов. теперь вы должны сравнить, если это одно и то же. вы не можете сравнить два объекта виджета с помощью оператора ==. Вы могли бы сравнить их идентификаторы, как это: идентификатор

    myWidget.id == focusedWidget.id 
    
  2. виджета: таким образом, вы просто легко получить идентификатор текущего узла из focusUtil и сравнить его с идентификатором у вас есть Лик это:

    myWidgetId == focusedWidgetId 
    

ссылки:
http://dojotoolkit.org/reference-guide/1.9/dijit/focus.html
http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html

Смежные вопросы