2014-09-25 21 views
8

Quando si utilizza ctrl + clic per attivare un evento di menu di contesto (Context.JS) in Safari su Mac OS 10.9, vengono attivati ​​anche gli eventi mouse/su/clic. Questo fa sì che il menu sia chiuso. Gli eventi sembrano verificarsi in modo asincrono in relazione l'uno con l'altro, quindi stopPropagation non funziona e anche questo sembra comportare un comportamento intermittente, a volte va bene a volte no.Come disabilitare gli eventi click dall'evento contextmenu quando si usa Ctrl + clic in Safari per Mac?

Qualcun altro si è imbattuto in questo problema, in caso affermativo come è stato risolto/aggirato?

Purtroppo non sono in grado di rilasciare il codice alle masse, ma spero che suona familiare a qualcuno là fuori.

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

+0

Ho fatto e ho finito per aggiungere una chiamata setTimeout e disabilitare il mio gestore di clic se la funzione di timeout è ancora in esecuzione so che è brutta: | – Alex

+0

hai già trovato una soluzione? Sono incuriosito :) – ReConnected

risposta

5

si potrebbe fare uso della ctrlKey property del MouseEvent:

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>

Quindi, se si vuole patchare il context.js da soli, basta aggiungere 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 }); 

script di patch: http://pastebin.com/6ySveRty

+0

ma cosa succede se hai bisogno di prendere anche il Ctrl-clic? – Alex

+0

@Alex Qual è lo scenario attuale? A volte è necessario rilevare ctrl + clic come clic e somtimes come un menu di scelta rapida? In tal caso devi impostare un altro flag che bloccherà il menu contestuale e invece farà clic. – Kaiido

+0

@Alex, guarda l'aggiornamento per lo script context.js patchato – Kaiido

-1

Stai cercando di bloccare contro le persone copiano specifici gruppi di testo o il contenuto generale?

ID/ELEMENT/CLASS { 
-webkit-touch-callout: none; 
-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-ms-user-select: none; 
user-select: none; 
} 

forse questo è utile.

+0

Anche se è una buona idea cercare quale sia l'obiettivo, non sono sicuro che sia correlato con i particolari problemi in questione. Hai provato [context.js] (http://lab.jakiestfu.com/contextjs/) con un browser safari? – Kaiido

+0

Apparentemente ho downvoted accidentalmente questa risposta. Mi dispiace. – seequ

Problemi correlati