[在Mac的Safari中使用Ctrl + Click时如何从上下文菜单事件中禁用单击事件?

问题描述 投票:10回答:3

[在Mac OS 10.9上的Safari中使用ctrl +单击来触发上下文菜单事件(Context.JS)时,也会触发mousedown / up / click事件。这将导致菜单关闭。这些事件似乎是相对于彼此异步发生的,因此stopPropagation不起作用,这似乎也导致间歇性行为,有时很好,有时却没有。

还有其他人遇到过这个问题吗,如果您这样做了,您又如何解决/解决这个问题?

不幸的是,我无法将代码发布给大众,但我希望那里的人听起来很熟悉。

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

javascript jquery macos dom safari
3个回答
10
投票

您可以使用MouseEvent的ctrlKey property

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);
div {
  border: 1px solid red;
}

因此,如果要自己修补<div>hold ctrl+click in safari, chrome, etc</div>,只需添加context.js l24。

if(ctrlKey) return;

已修补的脚本: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 });


0
投票

此解决方案完全以Vue为中心,但是我想任何具有一些JavaScript事件处理相关技能的人都应该能够应用它……我可能也做错了什么……但是至少手动测试有效……无论如何至少对我来说,它可以防止在Mac上通过Ctrl + Click约定触发默认单击,从而回答了如何在Safari中实现自定义右键单击的问题。

所以,这是可点击元素上的代码

http://pastebin.com/6ySveRty

这是vue事件处理程序的代码

@mouseup="handleMouseUp($event)" @mousedown="handleMouseDown($event)">

要实际看到它,请执行以下操作: , handleMouseDown: function(e){ if (e.target && e.ctrlKey == true) { e.bubbles = false e.preventDefault(); e.stopPropagation(); e.target.addEventListener('click', function(e) { if (e.ctrlKey) { e.stopPropagation(); } }, false); } } , handleMouseUp: function(e){ if (e.target && e.ctrlKey == true) { e.bubbles = false e.preventDefault(); e.stopPropagation(); e.target.addEventListener('click', function(e) { if (e.ctrlKey) { e.stopPropagation(); } }, false); } } (只需单击默认用户登录)https://qto.fi/qto/logon


-1
投票

您是否要阻止人们复制特定的文本或常规内容?

© www.soinside.com 2019 - 2024. All rights reserved.