我正在使用 dojo 的事件委托将 Tooltip 小部件连接到动态生成的 dom 节点。
Dojo 站点以这种方式解释事件委托:
“事件委托背后的想法是,不是将侦听器附加到每个感兴趣的单个节点上的事件,而是将单个侦听器附加到更高级别的节点,这将检查它捕获的事件目标以查看它们是否冒泡来自实际感兴趣的节点;如果是,则将执行处理程序的逻辑。”
以下是我的代码实现。它工作得很好......除了,工具提示只在第一个鼠标悬停事件之后显示。当我第一次将鼠标悬停在节点上时,事件会完美触发,但工具提示不会呈现。它只会显示随之而来的鼠标悬停事件。在第一个鼠标悬停事件中,我可以观察 Firebug 控制台并看到 xhr.get 进入数据库并获取正确的数据。如果我注释掉工具提示并输入一个简单的警报(),它会第一次起作用。
关于如何让工具提示显示在第一个鼠标悬停事件上的任何建议?提前致谢!
<div class="col_section" id="my_groups">
<div class="col_section_label">My Groups</div>
<ul>
<?php
foreach($myGroups as $grp) {
echo '<li><a class="myGroupLink" id="grp'.$grp['grp_id'].'">'.$grp['name'].'</a></li>';
}
?>
</ul>
</div>
<script>
require(["dojo/on",
"dojo/dom",
"dijit/Tooltip",
"dojo/_base/xhr",
"ready!"], function(on, dom, Tooltip, xhr) {
// Get Group ToolTip
var myObject = {
id: "myObject",
onMouseover: function(evt){
var grp_id = this.id;
var content = '';
xhr.get({
url: "getGrpInfo.php",
handleAs: "json",
content: {
grp_id: grp_id,
content: "tooltip"
},
load: function(info) {
if(info == 0) {
content = '<div class="grpToolTip">';
content += ' Information about this group is confidential';
content += '</div>';
} else {
content = '<div class="grpToolTip">';
content += ' <img src="../ajax/getimg.php?id='+info.logo_id+'" />';
content += ' <div style="text-align:center">'+info.name+'</div>';
content += '</div>';
}
new Tooltip({
connectId: [grp_id],
label: content
});
},
error: function() {}
});
}
};
var div = dom.byId("my_groups");
on(div,".myGroupLink:mouseover",myObject.onMouseover);
});
</script>