标题属性显示工具提示时是否有事件?
Is there an event for when the title attribute shows the tooltip?
所以,假设我有一个带有 title
属性的跨度:
<span title="Tooltip" id="mySpan">Span</span>
这显示工具提示很好,但我想附加某种事件侦听器,以便在标题显示为 JavaScript 或 JQuery 时附加某种事件侦听器。例如类似于(显然 "title"
不是有效事件):
document.getElementById("mySpan").addEventListener("title", function () {
console.log("Tooltip shown");
});
我知道我可以使用 JavaScript 和 mouseover
事件创建自己的工具提示,如下所示:
document.getElementById("mySpan").addEventListener("mouseover", function (event) {
console.log("Tooltip shown");
document.getElementById("myTooltip").style.display = 'block';
document.getElementById("myTooltip").style.top = (event.clientY + 5) + 'px';
document.getElementById("myTooltip").style.left = (event.clientX + 5) + 'px';
});
document.getElementById("mySpan").addEventListener("mouseout", function () {
document.getElementById("myTooltip").style.display = 'none';
});
#myTooltip {
position: absolute;
background-color: lightgray;
padding: 2px 4px;
font-size: 10px;
}
<span id="mySpan">Span</span>
<span id="myTooltip" style="display: none;">Tooltip</span>
但这意味着我必须从头开始重新创建 title
属性的样式,它会随着浏览器的不同而变化,从 OS 到 OS,我会真的不想改变用户习惯看到的标准工具提示。
因此,总而言之,是否可以在 title
属性显示时附加某种事件侦听器?
您可以使用 jQuery-ui 工具提示小部件
$( document ).tooltip();
$("#inputhelp").tooltip({
open: function( event, ui ) {
console.log('Text tooltip');
}
});
<link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>
<a href="#" title="Anchor description">Anchor text</a>
<input id="inputhelp" title="Input help">
</p>
免责声明:这实际上不是事件侦听器。
这不是最好的解决方案,但它确实有效。它所做的只是在 mouseover
上启动一个持续 0.5 秒的 setTimeout
(基于反复试验,无法在任何文档中找到它),并在 mouseout
时取消它。它对我有用,但如果延迟根据浏览器/OS.
发生变化,它可能不起作用
var titleShowTimeout;
document.getElementById("mySpan").addEventListener("mouseover", function (event) {
titleShowTimeout = setTimeout(function () {
console.log("Tooltip shown");
}, 500);
});
document.getElementById("mySpan").addEventListener("mouseout", function () {
clearTimeout(titleShowTimeout);
});
<span title="Tooltip" id="mySpan">Span</span>
所以,假设我有一个带有 title
属性的跨度:
<span title="Tooltip" id="mySpan">Span</span>
这显示工具提示很好,但我想附加某种事件侦听器,以便在标题显示为 JavaScript 或 JQuery 时附加某种事件侦听器。例如类似于(显然 "title"
不是有效事件):
document.getElementById("mySpan").addEventListener("title", function () {
console.log("Tooltip shown");
});
我知道我可以使用 JavaScript 和 mouseover
事件创建自己的工具提示,如下所示:
document.getElementById("mySpan").addEventListener("mouseover", function (event) {
console.log("Tooltip shown");
document.getElementById("myTooltip").style.display = 'block';
document.getElementById("myTooltip").style.top = (event.clientY + 5) + 'px';
document.getElementById("myTooltip").style.left = (event.clientX + 5) + 'px';
});
document.getElementById("mySpan").addEventListener("mouseout", function () {
document.getElementById("myTooltip").style.display = 'none';
});
#myTooltip {
position: absolute;
background-color: lightgray;
padding: 2px 4px;
font-size: 10px;
}
<span id="mySpan">Span</span>
<span id="myTooltip" style="display: none;">Tooltip</span>
但这意味着我必须从头开始重新创建 title
属性的样式,它会随着浏览器的不同而变化,从 OS 到 OS,我会真的不想改变用户习惯看到的标准工具提示。
因此,总而言之,是否可以在 title
属性显示时附加某种事件侦听器?
您可以使用 jQuery-ui 工具提示小部件
$( document ).tooltip();
$("#inputhelp").tooltip({
open: function( event, ui ) {
console.log('Text tooltip');
}
});
<link href="https://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>
<a href="#" title="Anchor description">Anchor text</a>
<input id="inputhelp" title="Input help">
</p>
免责声明:这实际上不是事件侦听器。
这不是最好的解决方案,但它确实有效。它所做的只是在 mouseover
上启动一个持续 0.5 秒的 setTimeout
(基于反复试验,无法在任何文档中找到它),并在 mouseout
时取消它。它对我有用,但如果延迟根据浏览器/OS.
var titleShowTimeout;
document.getElementById("mySpan").addEventListener("mouseover", function (event) {
titleShowTimeout = setTimeout(function () {
console.log("Tooltip shown");
}, 500);
});
document.getElementById("mySpan").addEventListener("mouseout", function () {
clearTimeout(titleShowTimeout);
});
<span title="Tooltip" id="mySpan">Span</span>