jQuery-仅当事件足够长时才触发鼠标悬停

jQuery-仅当事件足够长时才触发鼠标悬停,jquery,ajax,Jquery,Ajax,在我有一个日历的页面上,在向服务器发送AJAX调用以检索当天事件的日期上移动光标。这些事件随后被列在日历旁边的一个div中。 这是正确的 问题是:如果光标所在的日期不在日历的一侧,但位于日历的内部,则不可能将光标移离日历而不触发另一个显示另一天事件的调用。 这是因为当光标在其他日期移动时,“mouseover”事件会立即触发。 我需要的是,仅当光标在一天中停留很少的时间(比如500毫秒)时才触发jQuery函数,而不仅仅是当它只是经过它时。 那么,有没有可能对jQuery说:“如果鼠标移动至少持

在我有一个日历的页面上,在向服务器发送AJAX调用以检索当天事件的日期上移动光标。这些事件随后被列在日历旁边的一个div中。 这是正确的

问题是:如果光标所在的日期不在日历的一侧,但位于日历的内部,则不可能将光标移离日历而不触发另一个显示另一天事件的调用。
这是因为当光标在其他日期移动时,“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);
    });