ツールチップ ウィジェットを動的に生成された dom ノードに接続するために、dojo のイベント委任を使用しています。
Dojo サイトでは、イベント委譲について次のように説明しています。
「イベント委任の背後にある考え方は、関心のある個々のノードのイベントにリスナーをアタッチする代わりに、より高いレベルのノードに単一のリスナーをアタッチすることです。これにより、キャッチしたイベントのターゲットをチェックして、それらがバブルしたかどうかを確認します対象の実際のノードから; その場合、ハンドラーのロジックが実行されます。」
以下は私のコードの実装です。それは美しく機能します...ただし、ツールチップは最初のマウスオーバーイベントの後にのみ表示されます。最初にノードにマウスオーバーすると、イベントは完全に発生しますが、ツールチップはレンダリングされません。結果として発生するマウスオーバー イベントのみが表示されます。最初のマウスオーバー イベントで、Firebug コンソールを監視し、xhr.get がデータベースに移動して正しいデータを取得することを確認できます。ツールチップをコメントアウトして単純な alert() を入れると、最初はうまくいきます。
最初のマウスオーバー イベントでツールチップを表示する方法について何か提案はありますか? 前もって感謝します!
<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>