【问题标题】:How to handle both dblclick and click events on Calendar Event如何处理日历事件上的 dblclick 和单击事件
【发布时间】:2012-01-10 19:56:30
【问题描述】:

我试图在 fullCalendar 中单击一个事件时执行一项操作,并在双击同一事件时执行另一项操作,并且在 dblClick 上触发单击事件时遇到问题。

我想通过单击更改一系列事件的边框颜色,并通过双击打开编辑对话框。

我已经在这样的 eventRender 函数中尝试过,但没有奏效。此外,将 click 事件排除在 eventRender 之外并使用 eventClick 函数进行单击,它的行为方式相同。

        element.bind('dblclick', function(ev) {
            editEvent(event,element,view);
            alert('double click!');
        });
        element.bind('click', function(ev) {
            var eventSeries=$('#calendar').fullCalendar('clientEvents', event.id);
            $(eventSeries).each(function(){this.borderColor='red'});
            $('#calendar').fullCalendar('updateEvent', eventSeries);
            alert('single click!');
        });

当 eventClick 或 click 绑定中没有任何内容时,dblclick 可以正常触发,但是一旦我在 click 绑定或 eventClick 中有代码,dblclick 就永远不会触发。有谁知道我如何处理这两种类型的事件?

【问题讨论】:

    标签: jquery fullcalendar


    【解决方案1】:

    您可以滚动自己的单击/双击事件,本质上,在用户尝试双击时,给用户足够的时间完成第二次单击后,使用 setTimeout 触发单击事件。

    这是小提琴:http://jsfiddle.net/wfG6k/

    $button.bind( 'click', function( event ) {
    
        var doubleClickOpportunity = 200, // Adjust this to whatever feels right
            $elem = $( event.target ),
            clicker = $elem.data( 'clicker' ); // Holder for the doubleclick setTimeout
    
        if ( clicker ) {
            // If there's a setTimeout stored in clicker, then this is a double click
            clearTimeout( clicker );
            $elem.data( 'clicker', '' );
            $elem.trigger( 'doubleclick' );
        } else {
            // Otherwise, it's either a single click or the beginning of a double click
    
            // So set a timer to decide which it is - if the timer runs out,
            // it's just a single click.
            $elem.data( 'clicker', setTimeout(function() {
                $elem.data( 'clicker', '' );
                $elem.trigger( 'singleclick' );
            }, doubleClickOpportunity ));
        }
    
    });
    
    $button.bind( 'singleclick', function() {
        // I'm a single click!
    });
    
    $button.bind( 'doubleclick', function() {
        // I'm a double click!
    });
    

    【讨论】:

    • 感谢您的帮助。在您回复之前,我正在研究类似的解决方案,但我仍然遇到问题。你的小提琴对我很有用,我将它添加到包含 [fullCalendar] 的小提琴中,它在那里也能正常工作。在我的代码中,它在 Chrome 和 FF 中运行良好,但在 Internet Explorer 中仍然存在问题。双击触发为单击,并且只有当您单击 3 次时才会触发双击事件。我的代码中一定有其他地方导致了这个问题!谢谢
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多