2015-10-01 51 views
1

我一直在玩这个游戏很长一段时间,我不知道什么是错的。当我连续有几个链接,并且每隔一段时间,我的鼠标光标就会快速地在它们上面飘动,当它离开时(即使光标不再位于链接上时,它仍然可见),工具提示将保持可见状态。Kendo UI Tooltip有时会在消失时保持可见状态

我相信我的代码在逻辑上是有效的,别人能否看到他们是否知道为什么这里和那里的工具提示仍然可见?

对于这种类型的链接:

<a href="www.rich.com" onmouseover="tooltip(this); this.onmouseover=null;">Link</a>

下面是代码:

function tooltip(e) { 
    var ticketType = j$(e).data("ticket-type"); 
    var ticketID = j$(e).data("ticket-id"); 
    j$.post("/Some/Url/", { "ticketID":ticketID, "ticketType":ticketType }, 
     function(r) { 
      var title = r["tt"]; 
      var tooltip = j$(e).kendoTooltip({ content: title, position: "top" }).data("kendoTooltip"); 
     }).always(function() { 
      if (j$(e).is(":hover")) { j$(e).data("kendoTooltip").show(); } 
      else { j$(e).data("kendoTooltip").hide(); } 
     }); 

    j$(e).hover(function() {}, 
     // Handler for when the pointer is leaving an element 
     function(e) { 
      if (j$(e.target).data("kendoTooltip") != undefined) { 
       j$(e.target).data("kendoTooltip").hide(); 
       .log(e.target.innerHTML + ": was hidden."); 
      } 
     } 
    ); 
} 

回答

0

我认为问题是,有时你阿贾克斯后返回之前鼠标移出,因此工具提示在您离开链接后显示。除了隐藏鼠标移开时,又有怎样的目标链接上设置数据属性,使得AJAX回报可以显示前检查属性工具提示:

function tooltip(e) { 
    j$(e).data("hover", "true"); //turn on hover data-attribute 
    var ticketType = j$(e).data("ticket-type"); 
    var ticketID = j$(e).data("ticket-id"); 
    j$.post("/Some/Url/", { "ticketID":ticketID, "ticketType":ticketType }, 
     function(r) { 
      var title = r["tt"]; 
      var tooltip = j$(e).kendoTooltip({ content: title, position: "top" }).data("kendoTooltip"); 
     }).always(function() { 
      if (j$(e).data("hover") == "true") { j$(e).data("kendoTooltip").show(); } 
      else { j$(e).data("kendoTooltip").hide(); } 
     }); 

    j$(e).hover(function() {}, 
     // Handler for when the pointer is leaving an element 
     function(e) { 
      j$(e).data("hover", "false"); //turn offhover data-attribute 
      if (j$(e.target).data("kendoTooltip") != undefined) { 
       j$(e.target).data("kendoTooltip").hide(); 
       .log(e.target.innerHTML + ": was hidden."); 
      } 
     } 
    ); 
} 

DEMO

注意:demo使用setTimeout来伪造ajax调用

+0

感谢您的回答!我没有看到你的if(j $(e).data(“hover”)==“true”)和我的if(j $(e).is(“:hover”))之间的区别。 '。你能进一步解释吗? –

+0

@RichieEpiscopo,如果浏览器正常工作,它们应该工作相同,如果某些浏览器实现悬停检测的方式不同,则手动在mousout上设置数据属性可能会在浏览器中更加一致。它有所作为吗? – ezanker

相关问题