JQuery在元素级别内联再现onmouseenter逻辑
JQuery reproducing onmouseenter logic inline at element level
我有一个非常大的HTML页面,作为批更新/验证过程的一部分,企业用户在其中显示数千条数据库记录。
在页面中,我需要为许多元素添加工具提示。以前我们在<head>
:中使用了可靠的方法
$("elementID").mouseenter(function(){
// tool tip logic
// goes here
});
问题是,这会增加数万行JavaScript,并导致巨大的性能问题。因此,我正在研究将其应用于元素级别的差异。因此,我没有为每个需要工具提示的元素提供上面的代码,而是声明一个单独的脚本块,如下所示:
function ShowTooltip(ctrl, tooltip) {
var o = $(ctrl).offset();
var y = o.top;
var x = o.left;
$("#ttfloat").css({ top: o.top, left: o.left });
$("#ttfloat").html(tooltip);
$("#ttfloat").show();
}
function HideToolTip() {
$("#ttfloat").hide();
}
然后对每个元素使用以下方法进行发射:
<div id="ttfloat"> </div>
<p>Tool tip <span id="lbl1" runat="server" onmouseover="ShowTooltip(this, 'Tip Text');" onmouseout="HideToolTip();">appears here</span></p>
问题是,当鼠标悬停在<span>
元素上时,当浏览器重复触发onmouseover
时,工具提示元素会闪烁。我在其他SO解决方案中读到JQuery mouseenter是解决这一问题的方法,但只能找到将事件连接在头部的示例。它可以在元素中在线完成吗?或者有更好的方法吗?该解决方案必须适用于较旧的浏览器,并且符合标准。
参见JSFiddle
这样的东西怎么样:
<span data-tooltip-text="Tip text here">blah blah</span>
然后:
$("[data-tooltip-text]").on({
mouseenter : function() {
var o = $(this).offset();
var tooltip = $(this).attr("data-tooltip-text");
$("#ttfloat").css({ top: o.top, left: o.left })
.html(tooltip)
.show();
},
mouseleave : function() {
$("#ttfloat").hide();
}
});
演示:http://jsfiddle.net/szCU2/2/
我建议你稍微偏移一下工具提示的垂直位置,这样它就不会完全覆盖你悬停的元素(这看起来很笨重,可能会导致鼠标离开事件,因为鼠标当时在工具提示上):
o.top + 18; // or whatever offset works for you
演示:http://jsfiddle.net/szCU2/3/
如果所有div的行为都相同,则应该使用类选择器而不是id选择器,并简单地将该类添加到所有div中。然后你只需要一次代码,而不是为每个div都有一个副本。把数据存储在有用的地方(比如div的自定义属性),然后在代码中使用它。
html:
<div id="blah" class="divWithTooltip" data-custom-attribute="some tooltip text">
javascript:
$('.divWithTooltip')
.on('mouseenter', function() {
someMethodToDoYourTooltipStuff( $(this).attr('data-custom-attribute') );
})
.on('mouseout', function() {
someMethodToHideYourTooltip();
});
相关文章:
- 困在逻辑中试图定位动态的东西
- Javascript逻辑运算符和字符串/数字
- 这个条件语句的逻辑有问题
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 在javascript中传递onmouseenter事件上的onfocus
- Redux应用程序结构-在哪里放置服务/业务逻辑
- JavaScript 中三元条件和逻辑和运算符的运算符优先级
- 用于验证JS中逻辑运算符表达式的正则表达式
- JavaScript中的逻辑OR(||)
- 显示引导弹出操作异常的逻辑
- 使用Ember的Web应用程序架构.动画逻辑应该放在哪里
- 逻辑和/或运算符-意外的最终结果
- 如果在过去两个小时内没有记录,返回0,javascript逻辑
- 为更改的输入返回插入符号位置的逻辑
- 当DIV的高度低于某个数字时,隐藏DIV的正确逻辑是什么
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- 为什么在javascript函数声明中使用逻辑运算符
- 如何表达这种逻辑
- 分页逻辑显示错误的页码
- JQuery在元素级别内联再现onmouseenter逻辑