2016-08-29 4 views
0

Ich versuche, sowohl Ctrl zu fangen fangen. Ich sah einen Thread darüber, wie das hier zu tun: jquery keypress event for cmd+s AND ctrl+sKann nicht Cmd-S auf Chrome auf dem Mac

Ich habe folgende Schnipsel in meinem Code:

$(document).keypress(function(event) { 
    if (event.which == 115 && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
    event.preventDefault(); 
    save(); 
    return false; 
    } 
    return true; 
}); 

wo save() eine JavaScript-Funktion ist, die eine AJAX-Anforderung in der Zukunft schicken, aber nur hat alert('Saved!'); für jetzt.

Doch obwohl dies fängt Ctrl - S, es verfängt nicht Cmd - S auf Chrome, anstatt nur die Webseite Dialog wie üblich speichern zu öffnen. Ich sah, dass jemand anderes auf dieser Seite das gleiche Problem hatte, aber ich sah keine Lösung dafür.

Vielen Dank im Voraus!

+0

auch zu beachten, 'das KeyPress-Ereignis nicht von einer offiziellen Spezifikation abgedeckt ist, begegnet das tatsächliche Verhalten, wenn Sie es können in allen Browsern, Browser-Versionen unterscheiden und platforms.' (von Offizielles [jQuery-Dokument für 'Tastendruck'] (https://api.jquery.com/keypress/)). Vielleicht sollten Sie in Erwägung ziehen, 'keypress' überhaupt nicht zu verwenden. – filoxo

+0

@filoxo Danke, dass Sie mich wissen lassen :) –

Antwort

0

Ich denke, Tastendruck, wie Sie es haben, nicht Metakeys auf die gleiche Weise registrieren, siehe: Diffrence between keyup keydown keypress and input events Hier ist eine Geige, die mit Keydown arbeiten scheint, und dann jeweils in der Reihenfolge zu erfassen. Ich hoffe es hilft?

var metaflag = false; 
 

 
$(document).on({ 
 
\t keydown: function(event) { 
 
    if (event.ctrlKey||event.metaKey || event.which === 19) { 
 
     event.preventDefault(); 
 
     $('.monitor').text('key '+event.which); 
 
     metaflag = true; 
 
    } 
 
    \t if(metaflag && event.which === 83){ // 83 = s? 
 
     event.preventDefault(); // maybe not necessary 
 
     $('.display').text('saving?'); 
 
     metaflag = false; 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class='monitor'></div> 
 
<div class='display'></div>

+0

Das funktioniert perfekt. Vielen Dank! : D –