如何在jquery中右键单击添加dbclick()

uni*_*ser 8 javascript jquery

嗨我想在右键单击上有一个dblclick(),因为谷歌地图必须放大和缩小.有没有办法做到这一点.我已经编写了dblclick但现在它只使用左键单击.有关如何执行此操作的任何指示.这是我的代码

         $("div#demo1").dblclick(function(e) {
            //alert(e.getElementById());

            if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
                alert("Left Mouse Button was clicked on demo1 div!");
                $("div.window").animate({
                'height':'+=20', 'width':'+=20'
                },0,function(){
                    jsPlumb.repaintEverything();
                    jsPlumb.repaintEverything();
                });
                // Left mouse button was clicked (all browsers)
            }
            else if( (!$.browser.msie && e.button == 2) || ($.browser.msie && e.button == 3) ) {
                alert("right click double");
            }
        }); 
Run Code Online (Sandbox Code Playgroud)

Use*_*ode 8

还有另一种方法可以检测到双击右键,不涉及摆弄定时器或手动跟踪点击次数..detail在事件mouseupmousedown事件中使用事件对象的属性..detail保存点击次数,它会告诉您最近发生了多少次点击.如果.detail === 2是双击.

// suppress the right-click menu
$('#target').on('contextmenu', function (evt) {
    evt.preventDefault();
});

$('#target').mouseup(function (evt) {
  if (evt.which === 3) { // right-click
    /* if you wanted to be less strict about what
       counts as a double click you could use
       evt.originalEvent.detail > 1 instead */
    if (evt.originalEvent.detail === 2) { 
      $(this).text('Double right-click');
    } else if (evt.originalEvent.detail === 1) { 
      $(this).text('Single right-click');
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

您可能会注意到我正在使用evt.originalEvent.detail访问该属性而不仅仅是.detail.这是因为jQuery提供了自己不包含的事件对象版本.detail,但是您可以访问浏览器返回的原始事件对象.originalEvent.如果您使用的是纯JavaScript而不是jQuery,那么您只需使用它evt.detail.

这是一个有效的例子.

  • 这个答案远远优于其他答案,原因很简单:最终用户可以决定什么算作双击.如果您将默认时间硬编码到代码中,那么从默认情况下更改双击时间的人可能会认为您的网站已损坏,和/或2)因为无法快速点击而不使用它足够.我刚刚在Chrome,Firefox,Opera和IE上使用W​​indows上的不同点击速度设置对其进行了测试,并且它在所有这些设备中都运行良好. (3认同)

Esa*_*ija 6

没有真正的方法可以做到这一点,您可以通过双击默认计时器来模拟它,IIRC是300毫秒:

function makeDoubleRightClickHandler( handler ) {
    var timeout = 0, clicked = false;
    return function(e) {

        e.preventDefault();

        if( clicked ) {
            clearTimeout(timeout);
            clicked = false;
            return handler.apply( this, arguments );
        }
        else {
            clicked = true;
            timeout = setTimeout( function() {
                clicked = false;
            }, 300 );
        }
    };
}

$(document).contextmenu( makeDoubleRightClickHandler( function(e) {
    console.log("double right click" );
}));
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/5kvFG/2/