在Safari for Mac中使用Ctrl + Click时,如何禁用contextmenu事件中的单击事件?

Gar*_*hPN 9 javascript safari macos jquery dom

当使用ctrl + click在Mac OS 10.9上的Safari中触发上下文菜单事件(Context.JS)时,mousedown/up/click事件也会触发.这会导致菜单关闭.这些事件似乎是彼此异步发生的,所以stopPropagation不起作用,这似乎也会导致间歇性的行为,有时它很好,有时它不是.

有没有其他人遇到过这个问题,如果是这样,你是如何解决它/解决它的?

不幸的是,我无法向群众发布代码,但我希望那些人听起来很熟悉.

fiddle: http://jsfiddle.net/gnh2tuyj/

Kai*_*ido 9

您可以使用MouseEvent 的ctrlKey属性:

var div = document.querySelector('div');
div.addEventListener('click', function(e) {
  if (e.ctrlKey) return;
  e.preventDefault();
  alert('click!');
}, false);

div.addEventListener('contextmenu', function(e) {
  e.preventDefault();
  alert('context menu!');
}, false);
Run Code Online (Sandbox Code Playgroud)
div {
  border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<div>hold ctrl+click in safari, chrome, etc</div>
Run Code Online (Sandbox Code Playgroud)

因此,如果您想自己修补context.js,只需添加if(ctrlKey) return;l24即可.

l23    $(document).on('click', 'html', function (e) {
l24    if(e.ctrlKey) return;
l25    $('.dropdown-context').fadeOut(options.fadeSpeed, function(){
l26     $('.dropdown-context').css({display:''}).find('.drop-left').removeClass('drop-left');
l27     });
l28    });
Run Code Online (Sandbox Code Playgroud)

补丁脚本:http://pastebin.com/6ySveRty