如何在Calendar Event上处理dblclick和click事件

时间:2012-01-10 19:56:30

标签: jquery fullcalendar

我在单击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绑定中没有任何内容时,dbclick会正常触发,但只要我在click binding或eventClick中有代码,dblclick就永远不会被触发。有谁知道我如何处理这两类事件?

1 个答案:

答案 0 :(得分:3)

你可以滚动你自己的单击/双击事件,基本上,使用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!
});