jQuery-仅当事件足够长时才触发鼠标悬停
在我有一个日历的页面上,在向服务器发送AJAX调用以检索当天事件的日期上移动光标。这些事件随后被列在日历旁边的一个div中。 这是正确的 问题是:如果光标所在的日期不在日历的一侧,但位于日历的内部,则不可能将光标移离日历而不触发另一个显示另一天事件的调用。jQuery-仅当事件足够长时才触发鼠标悬停,jquery,ajax,Jquery,Ajax,在我有一个日历的页面上,在向服务器发送AJAX调用以检索当天事件的日期上移动光标。这些事件随后被列在日历旁边的一个div中。 这是正确的 问题是:如果光标所在的日期不在日历的一侧,但位于日历的内部,则不可能将光标移离日历而不触发另一个显示另一天事件的调用。 这是因为当光标在其他日期移动时,“mouseover”事件会立即触发。 我需要的是,仅当光标在一天中停留很少的时间(比如500毫秒)时才触发jQuery函数,而不仅仅是当它只是经过它时。 那么,有没有可能对jQuery说:“如果鼠标移动至少持
这是因为当光标在其他日期移动时,“mouseover”事件会立即触发。
我需要的是,仅当光标在一天中停留很少的时间(比如500毫秒)时才触发jQuery函数,而不仅仅是当它只是经过它时。
那么,有没有可能对jQuery说:“如果鼠标移动至少持续500毫秒,则触发函数;如果没有,则什么也不做” 目前我的jQuery函数是
$('div#eventi-home').on('mouseover', 'li.calday', function() {
var $li = $(this),
form_data = {
day: $li.data('giorno'),
month: $li.data('mese'),
year: $li.data('anno')
};
$.ajax({
url: "<?php echo base_url('home/events_of_the_day/') ?>",
type: 'POST',
data: form_data,
success: function(msg) {
$('div#events-of-the-day').html(msg);
}
});
});
$('div#eventi home').on('mouseover','li.calday',function(){
var$li=$(此),
表单_数据={
日期:$li.data('giorno'),
月份:$li.data('mese'),
年份:$li.数据('anno')
};
$.ajax({
url:“”,
键入:“POST”,
数据:表格数据,
成功:函数(msg){
$('div#events of the day').html(msg);
}
});
});
一天有这个密码
<li class="calday" data-giorno="14" data-mese="11" data-anno="2013" >14</li>
14
如何更改我的功能?hoverIntent插件非常适合:
$('div#eventi home li.calday').hoverIntent(function(){
var$li=$(此),
表单_数据={
日期:$li.data('giorno'),
月份:$li.data('mese'),
年份:$li.数据('anno')
};
$.ajax({
url:“”,
键入:“POST”,
数据:表格数据,
成功:函数(msg){
$('div#events of the day').html(msg);
}
});
},空);
您可以使用超时:
$('div#eventi-home').on('mouseover mouseout', 'li.calday', function (e) {
clearTimeout(window.timeout);
if (e.type === "mouseout") return;
window.timeout = setTimeout(function () {
//CODE HERE...
}, 500);
});
在这个解决方案中,函数总是被触发的,而且从ajax调用返回的数据没有显示在页面上。没错,问题是变量的作用域,我把它们放在setTimeout(函数…我把它们放在if(e.type…)之后,现在你的解决方案也起作用了。谢谢你。
$('div#eventi-home').on('mouseover mouseout', 'li.calday', function (e) {
clearTimeout(window.timeout);
if (e.type === "mouseout") return;
window.timeout = setTimeout(function () {
//CODE HERE...
}, 500);
});