gpt4 book ai didi

javascript - 在 Dojo Select 中添加工具提示

转载 作者:行者123 更新时间:2023-11-28 07:41:39 25 4
gpt4 key购买 nike

我想向 Dojo Select 中的项目添加工具提示。当脚本中包含商店时,此代码会添加一个工具提示。

<!DOCTYPE html>
<html>
<head>

<style type="text/css">
@import "https://ajax.googleapis.com/ajax/libs/dojo/1.9.1/dijit/themes/claro/claro.css";
@import "https://ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/resources/dojo.css";
</style>

<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.9.0/dojo/dojo.js" type="text/javascript" data-dojo-config="async: true"></script>

<script>
require(["dijit/form/Select",
"dojo/store/Memory",
"dojo/domReady!"
], function (Select, Memory) {

var store = new Memory({
data: [
{ id: "foo", label: '<div tooltip="Foo Tooltip" onmouseover="showTooltip(this)" onmouseout="hideTooltip(this)">FOO</div>' },
{ id: "bar", label: '<div tooltip="Bar Tooltip" onmouseover="showTooltip(this)" onmouseout="hideTooltip(this)">Bar</div>' }
]
});

var s = new Select({
store: store,
labelType: 'html',
labelAttr: 'label'
}, "target");
s.startup();
});

function showTooltip(el) {
dijit.showTooltip(el.getAttribute('tooltip'), el);
}

function hideTooltip(el) {
dijit.hideTooltip(el);
}

</script>
</head>

<body class="claro">
<div id="target"></div>
</body>
</html>

但是,在我的应用程序中,我的商店位于单独的模块 (stores.js) 中。

define([], function () {
return {
priority: [
{ id: "foo", label: '<div tooltip="Foo Tooltip" onmouseover="showTooltip(this)" onmouseout="hideTooltip(this)">FOO</div>' },
{ id: "bar", label: '<div tooltip="Bar Tooltip" onmouseover="showTooltip(this)" onmouseout="hideTooltip(this)">Bar</div>' }
]
};
};

我在 require ("modules/stores") 中设置模块,并将别名放入函数 (Stores) 中,并使用此代码创建我的选择。

new Select({
id: "cboPriority",
store: new Memory({ data: Stores.priority }),
labelType: 'html',
labelAttr: 'label'
}, "divPriority").startup();

我尝试在模块中添加 showTooltip 和 hideTooltip 函数,但仍然收到控制台错误“ReferenceError:showTooltip 未定义”。设置脚本和模块以便我可以显示工具提示的正确方法是什么?

最佳答案

您正在尝试通过标签字符串在元素上设置内联 onmouseover 事件处理程序。这将尝试调用全局 showTooltip 函数,但不存在这样的函数 - 您的 showTooltip 函数包含在您的 require 工厂函数中。

假设您正在创建一个 HTML 标签,其中的节点包含指示要显示的文本的属性,在这种特定情况下更好的选择是使用 dojo/on 的 event delegation连接一个用于鼠标悬停的事件处理程序和另一个用于鼠标移出的事件处理程序:

var dropdownNode = s.dropDown.domNode;
on(dropdownNode, '[data-tooltip]:mouseover', function () {
Tooltip.show(this.getAttribute('data-tooltip'), this);
});
on(dropdownNode, '[data-tooltip]:mouseout', function () {
Tooltip.hide(this);
});

(上面代码中的Tooltip指的是dijit/Tooltip模块,我选择使用至少是有效的HTML5的数据属性。)

说实话,我宁愿一开始就避免在数据中嵌入 HTML,但这可能是从您所在位置到您想要到达的位置的最短路径。

关于javascript - 在 Dojo Select 中添加工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com