如何在道场中查明我的自定义窗口小部件是否关注?
我有dojo编辑器,我知道编辑器是否已经关注?
答案 0 :(得分:3)
您可以使用模块dijit / focus来找出焦点
来自DOJO DOCS
跟踪活动小部件
在任何时候都有一套(因为没有更好的词) “活动”或“聚焦”小部件,意味着当前关注的小部件 而那个小部件的祖先。 “祖先”可以指祖先的祖先 (例如:TextBox - > Form),或逻辑父子关系(例如: TooltipDialog - > DropDownButton)。
例如,如果焦点位于一个TabContainer内的TextBox中 由DropDownButton触发的TooltipDialog,堆栈就是 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(", ")); }); });
答案 1 :(得分:3)
标题中的问题与答案中的答案不同。
通过使用dojo的 focusUtil(“dijit / focus”),有两种方法可以在标题中实现这个问题。两种方式都可以找到你可以找到使用它的小部件和dijit的注册表(“dijit / registry”)。
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)
focusUtil.activeStack
:为您提供一系列具有焦点的小部件(父级到子级)。所以数组中的最后一项是具有焦点的直接小部件。索引值是小部件ID,因此您应该通过以下代码获取小部件
var focusedWidgetId = focusUtil.activeStack[focusUtil.activeStack.length-1];
var focusedWidget = registry.byId(focusedWidgetId);
现在,如果你想知道当前关注的小部件是否是某个特定小部件,它取决于你手中的特定小部件:
小部件本身:就像上面示例的返回值一样。现在你必须比较这些是否相同。您无法使用==
运算符比较两个窗口小部件对象。你可以这样比较他们的ID:
myWidget.id == focusedWidget.id
小部件的ID:这样您就可以轻松地从focusUtil获取当前节点的ID,并将其与您所拥有的ID进行比较:
myWidgetId == focusedWidgetId
参考文献:
http://dojotoolkit.org/reference-guide/1.9/dijit/focus.html
http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html
答案 2 :(得分:0)
require([“dijit / focus”],function(focusUtil){
var activeElement = focusUtil.curNode; //如果没有聚焦元素,则返回null
});
查看打击网址,你可以看到一些例子
http://dojotoolkit.org/reference-guide/1.8/dijit/focus.html#dijit-focus
答案 3 :(得分:0)
a)对于 dojo 1.6::致电dijit.getFocus()
。这将返回一个对象,其中包含当前聚焦的dom节点,以及其他内容(选定的文本等)。要获取相应的小部件,只需执行以下操作:
var activeElement = dijit.getEnclosingWidget(dijit.getFocus().node);
这是源代码中dijit.getFocus()的完整参考:
// summary:
// Called as getFocus(), this returns an Object showing the current focus
// and selected text.
//
// Called as getFocus(widget), where widget is a (widget representing) a button
// that was just pressed, it returns where focus was before that button
// was pressed. (Pressing the button may have either shifted focus to the button,
// or removed focus altogether.) In this case the selected text is not returned,
// since it can't be accurately determined.
//
// menu: dijit._Widget or {domNode: DomNode} structure
// The button that was just pressed. If focus has disappeared or moved
// to this button, returns the previous focus. In this case the bookmark
// information is already lost, and null is returned.
//
// openedForWindow:
// iframe in which menu was opened
//
// returns:
// A handle to restore focus/selection, to be passed to `dijit.focus`.
b)对于 dojo 1.7及更高版本,请使用dijit/focus
:
require([ "dijit/focus" ], function(focusUtil) {
var activeElement = focusUtil.curNode; // returns null if there is no focused element
});