[在Mac OS 10.9上的Safari中使用ctrl +单击来触发上下文菜单事件(Context.JS)时,也会触发mousedown / up / click事件。这将导致菜单关闭。这些事件似乎是相对于彼此异步发生的,因此stopPropagation不起作用,这似乎也导致间歇性行为,有时很好,有时却没有。
还有其他人遇到过这个问题吗,如果您这样做了,您又如何解决/解决这个问题?
不幸的是,我无法将代码发布给大众,但我希望那里的人听起来很熟悉。
fiddle:
http://jsfiddle.net/gnh2tuyj/
您可以使用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 });
此解决方案完全以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
您是否要阻止人们复制特定的文本或常规内容?