doc.addEventListener 不是函数
doc.addEventListener is not a function
在我的页面上,我正在根据 jsTree angular 指令渲染一棵树。我正在尝试为具有描述字段的特定节点在悬停时显示工具提示。我已经检查了 jsTree 的 API 列表,并在悬停事件侦听器 hover_node
上找到了,借助 jsTree 的帮助 angular 指令,我已经为这个侦听器设置了我的范围函数
<js-tree
tree-data="scope"
tree-model="tree"
tree-events="hover_node:nodeHovered"
tree-core="tree_core"
></js-tree>
$scope.nodeHovered = function (e, data) {
var dataNode = data.node;
var original = dataNode.original;
if (typeof original.description !== 'undefined'){
var nodeDescription = original.description;
$(original).tooltip({
title: nodeDescription,
animation: true
});
}
};
当我将鼠标悬停在任何节点上时,我的功能运行良好,我可以在控制台中看到对象数据,因此我编写了一段代码,如果 typeof 节点描述不等于未定义,则允许在控制台中查看描述。它适用于控制台,但是当我为此节点添加函数 bootstrap 工具提示以将描述显示为工具提示时,我遇到了下一个错误
Uncaught TypeError: doc.addEventListener is not a function
正如我从这里的一些主题中了解到的,这个错误的本质是数组没有 addEventListener 函数,但我正在使用一个已经通过库定义的对象,所以任何人都可以帮助找到我缺少什么?感谢您的帮助。
我的完整代码
var treeFolders = [];
$scope.tree = [];
$http.get("folders.json")
.then(function (res) {
treeFolders = res.data;
angular.forEach(treeFolders, function(obj){
if(!("parent" in obj)){
obj.parent = "#";
}
})
})
$scope.load = function(){
$scope.tree = treeFolders
};
$scope.tree_core = {
multiple: false, // disable multiple node selection
check_callback: function (operation, node, node_parent, node_position, more) {
return true; // allow all other operations
},
themes : {
theme : "default",
dots : true,
icons : true
}
};
$scope.nodeHovered = function (e, data) {
var dataNode = data.node;
var original = dataNode.original;
if (typeof original.description !== 'undefined'){
var nodeDescription = original.description;
$(original).tooltip({
title: nodeDescription,
animation: true
});
}
};
html
<button class="btn btn-default" ng-click="load()">Load Tree</button>
<js-tree
tree-data="scope"
tree-model="tree"
tree-events="hover_node:nodeHovered"
tree-core="tree_core"
></js-tree>
这是因为您在以下代码中传递给 jQuery 的 original
对象是一个 jsTree 节点,而不是 DOM 元素:
$(original).tooltip({
title: nodeDescription,
animation: true
});
改为使用 jsTree 的 get_node
方法从节点中检索 jQuery 包装的 DOM 元素:
var liElement = data.instance.get_node(data.node, true);
这将为您提供整个 li
元素,但您可能希望工具提示相对于 a
元素放置:
var aElement = liElement.children('a').first();
然后:
aElement.tooltip({
title: nodeDescription,
animation: true
}).tooltip('show');
请注意,我在末尾添加了对 tooltip
的额外调用。这是为了在元素第一次悬停时显示工具提示。如果没有这个,工具提示将在第一次悬停时创建,然后直到下一次才显示。
在我的页面上,我正在根据 jsTree angular 指令渲染一棵树。我正在尝试为具有描述字段的特定节点在悬停时显示工具提示。我已经检查了 jsTree 的 API 列表,并在悬停事件侦听器 hover_node
上找到了,借助 jsTree 的帮助 angular 指令,我已经为这个侦听器设置了我的范围函数
<js-tree
tree-data="scope"
tree-model="tree"
tree-events="hover_node:nodeHovered"
tree-core="tree_core"
></js-tree>
$scope.nodeHovered = function (e, data) {
var dataNode = data.node;
var original = dataNode.original;
if (typeof original.description !== 'undefined'){
var nodeDescription = original.description;
$(original).tooltip({
title: nodeDescription,
animation: true
});
}
};
当我将鼠标悬停在任何节点上时,我的功能运行良好,我可以在控制台中看到对象数据,因此我编写了一段代码,如果 typeof 节点描述不等于未定义,则允许在控制台中查看描述。它适用于控制台,但是当我为此节点添加函数 bootstrap 工具提示以将描述显示为工具提示时,我遇到了下一个错误
Uncaught TypeError: doc.addEventListener is not a function
正如我从这里的一些主题中了解到的,这个错误的本质是数组没有 addEventListener 函数,但我正在使用一个已经通过库定义的对象,所以任何人都可以帮助找到我缺少什么?感谢您的帮助。
我的完整代码
var treeFolders = [];
$scope.tree = [];
$http.get("folders.json")
.then(function (res) {
treeFolders = res.data;
angular.forEach(treeFolders, function(obj){
if(!("parent" in obj)){
obj.parent = "#";
}
})
})
$scope.load = function(){
$scope.tree = treeFolders
};
$scope.tree_core = {
multiple: false, // disable multiple node selection
check_callback: function (operation, node, node_parent, node_position, more) {
return true; // allow all other operations
},
themes : {
theme : "default",
dots : true,
icons : true
}
};
$scope.nodeHovered = function (e, data) {
var dataNode = data.node;
var original = dataNode.original;
if (typeof original.description !== 'undefined'){
var nodeDescription = original.description;
$(original).tooltip({
title: nodeDescription,
animation: true
});
}
};
html
<button class="btn btn-default" ng-click="load()">Load Tree</button>
<js-tree
tree-data="scope"
tree-model="tree"
tree-events="hover_node:nodeHovered"
tree-core="tree_core"
></js-tree>
这是因为您在以下代码中传递给 jQuery 的 original
对象是一个 jsTree 节点,而不是 DOM 元素:
$(original).tooltip({
title: nodeDescription,
animation: true
});
改为使用 jsTree 的 get_node
方法从节点中检索 jQuery 包装的 DOM 元素:
var liElement = data.instance.get_node(data.node, true);
这将为您提供整个 li
元素,但您可能希望工具提示相对于 a
元素放置:
var aElement = liElement.children('a').first();
然后:
aElement.tooltip({
title: nodeDescription,
animation: true
}).tooltip('show');
请注意,我在末尾添加了对 tooltip
的额外调用。这是为了在元素第一次悬停时显示工具提示。如果没有这个,工具提示将在第一次悬停时创建,然后直到下一次才显示。