【发布时间】:2022-11-22 10:16:53
【问题描述】:
好的。所以在 $(document).ready(function() {...}
我有代码将事件绑定到具有 .user_tooltip 类的所有链接,该类进行 ajax 调用以获取用户信息。
它运作良好。无论它在页面中的什么位置,它都会在链接旁边显示工具提示。
不幸的是,在我的一生中,当鼠标在超时前离开链接时,我无法弄清楚如何添加延迟和取消延迟。
基本上工具提示会立即显示,这很烦人且无法使用。
我如何添加延迟,以便 ajax 不会触发直到...500 毫秒的鼠标悬停/鼠标输入,如果鼠标离开发生在 500 毫秒之前取消?
我已经尝试了所有我能想到的方法,但它没有用。
代码:
//user_tooltips
$(document).on('mouseover', '.user_tooltip', function(e){
e.preventDefault();
var user_tooltip_link = e.target.href;
user_tooltip_link = user_tooltip_link.split("/");
user_tooltip_name = user_tooltip_link[user_tooltip_link.length-1];
var user_tooltip_username = $("#user_tooltip_username").html();
if(user_tooltip_username != user_tooltip_name){
var user_tooltip_ajax_request = $.ajax({
type: "GET",
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
url: '/user_tooltip_info/' + user_tooltip_name
});
}
displayDiv("user_tooltip", getLeft(this.id) + 45, getTop(this.id));
});
$(document).on('mouseleave', '#user_tooltip', function(e){
$("#user_tooltip").hide();
});
$(document).on("click", function(){
$("#user_tooltip").hide();
});
【问题讨论】:
-
使用
setTimeout延迟 AJAX。如果他们 mouseout,请使用clearTimeout取消它。 -
是的,但如何?引入另一个 function(){...} 几乎打破了一切。抱歉这么密集,但我已经到了我无法清楚地思考该做什么的地步:(
-
我不明白 AJAX 代码,它没有显示结果的
success:函数。 -
是啊,你说得对。显示在显示 tool_tip 的 js.erb (rails) 中处理,这就是为什么我想延迟实际的 ajax 调用。不是最漂亮的代码,但它确实有效。
标签: jquery settimeout delay mouseover mouseleave