Dojo:如何查找小部件在Dojo中是否具有焦点
如何确定自定义小部件在Dojo中是否具有焦点Dojo:如何查找小部件在Dojo中是否具有焦点,dojo,focus,Dojo,Focus,如何确定自定义小部件在Dojo中是否具有焦点 我让dojo编辑器知道编辑器是否已经有焦点了?您可以使用dijit/focus模块查找焦点 来自DOJO文档 跟踪活动部件 在任何时候都有一套(因为没有更好的词) “活动”或“聚焦”小部件,指当前聚焦的小部件 还有那个小部件的祖先。“祖先”可以指任何一个DOM祖先 (例如:TextBox–>Form)或逻辑父子关系(例如: 工具提示对话框–>下拉按钮) 例如,如果焦点位于 TooltipDialog由下拉按钮触发,堆栈将 文本框–>内容窗格–>选项卡
我让dojo编辑器知道编辑器是否已经有焦点了?您可以使用dijit/focus模块查找焦点 来自DOJO文档 跟踪活动部件 在任何时候都有一套(因为没有更好的词) “活动”或“聚焦”小部件,指当前聚焦的小部件 还有那个小部件的祖先。“祖先”可以指任何一个DOM祖先 (例如:TextBox–>Form)或逻辑父子关系(例如: 工具提示对话框–>下拉按钮) 例如,如果焦点位于 TooltipDialog由下拉按钮触发,堆栈将 文本框–>内容窗格–>选项卡容器–>工具提示对话框–> 下拉按钮 activeStack[]参数表示这组小部件和一个应用程序 可以通过以下方式监视对activeStack[]的更改:
require([ "dijit/focus" ], function(focusUtil){
focusUtil.watch("activeStack", function(name, oldValue, newValue){
console.log("Focused widget + ancestors: ", newValue.join(", "));
});
});
require([“dijit/focus”],函数(focusUtil){var activeElement=focusUtil.curNode;//如果没有聚焦元素,则返回null
});
点击这里你可以看到一些例子
标题中的问题与描述中的问题答案不同 通过使用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
:提供具有焦点的小部件数组(父到子)。因此,数组中的最后一项是具有焦点的direct小部件。索引值是小部件ID,因此您应该通过以下代码获得小部件
var focusedWidgetId = focusUtil.activeStack[focusUtil.activeStack.length-1];
var focusedWidget = registry.byId(focusedWidgetId);
=
操作符比较两个小部件对象。您可以这样比较他们的ID:
myWidget.id == focusedWidget.id
myWidgetId == focusedWidgetId
a)对于Dojo1.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
});
但是使用这个我怎么能检查我的自定义小部件是否有焦点??