pulsación de tecla, ctrl + c (o algún combo así)
-
25-09-2019 - |
Pregunta
Estoy intentando crear accesos directos en el sitio web que estoy haciendo. Sé que puedo hacerlo de esta manera:
if(e.which == 17) isCtrl=true;
if(e.which == 83 && isCtrl == true) {
alert('CTRL+S COMBO WAS PRESSED!')
//run code for CTRL+S -- ie, save!
e.preventDefault();
}
Pero el ejemplo de abajo es más fácil y menos código, pero no es un evento de pulsación de tecla combo:
$(document).keypress("c",function() {
alert("Just C was pressed..");
});
Así que quiero saber si a través de este segundo ejemplo, podría hacer algo como:
$(document).keypress("ctrl+c",function() {
alert("Ctrl+C was pressed!!");
});
¿es esto posible? Lo he intentado y no funcionó, ¿qué estoy haciendo mal?
Solución
Otro enfoque (sin el plugin necesario) que sólo tiene que utilizar la propiedad .ctrlKey
de la href="http://api.jquery.com/category/events/event-object/" rel="noreferrer"> objeto de evento que se pasa en. indica si Ctrl fue presionado en el momento del evento, así:
$(document).keypress("c",function(e) {
if(e.ctrlKey)
alert("Ctrl+C was pressed!!");
});
Otros consejos
Soy un poco tarde a la fiesta, pero aquí es mi parte
$(document).on('keydown', function ( e ) {
// You may replace `c` with whatever key you want
if ((e.metaKey || e.ctrlKey) && ( String.fromCharCode(e.which).toLowerCase() === 'c') ) {
console.log( "You pressed CTRL + C" );
}
});
Jquery teclas de acceso rápido aplicación en lugar -. Que va a hacer todo lo necesario
jQuery teclas de acceso rápido es un plug-in que le agregar y quitar fácilmente para los manipuladores eventos de teclado en cualquier lugar de su código apoyar casi cualquier combinación de teclas.
Este plugin se basa fuera del plugin por Tzury Bar Yochay: jQuery.hotkeys
La sintaxis es la siguiente:
$(expression).bind(types, keys, handler); $(expression).unbind(types, handler);
$(document).bind('keydown', 'ctrl+a', fn);
// e.g. replace '$' sign with 'EUR'
// $('input.foo').bind('keyup', '$', function(){
// this.value = this.value.replace('$', 'EUR'); });
No se puede utilizar Ctrl + C por jQuery, pero se puede con otra biblioteca que es shortcut.js
Demostración en vivo: Abdennour jsFiddle
$(document).ready(function() {
shortcut.add("Ctrl+C", function() {
$('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+C");
});
shortcut.add("Ctrl+V", function() {
$('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+V");
});
shortcut.add("Ctrl+X", function() {
$('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+X");
});
});
No podía conseguir que funcione con .keypress (), pero funcionó con la función .keydown () así:
$(document).keydown(function(e) {
if(e.key == "c" && e.ctrlKey) {
console.log('ctrl+c was pressed');
}
});
Hay un plugin para jQuery llamado "teclas de acceso rápido" que le permite unen a combinaciones tecla abajo.
hace esto lo que está después?
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type='text/javascript'>
var ctrlMode = false; // if true the ctrl key is down
///this works
$(document).keydown(function(e){
if(e.ctrlKey){
ctrlMode = true;
};
});
$(document).keyup(function(e){
ctrlMode = false;
});
</script>
En mi caso, yo estaba buscando una tecla Ctrl y haga clic en keydown evento. Mis jQuery es similar al siguiente:
$('.linkAccess').click( function (event) {
if(true === event.ctrlKey) {
/* Extract the value */
var $link = $('.linkAccess');
var value = $link.val();
/* Verified if the link is not null */
if('' !== value){
window.open(value);
}
}
});
Donde "LinkAccess" es el nombre de la clase para algunos campos específicos en los que tengo un vínculo y quiero acceder a ella usando mi combinación de llave y haga clic.
$(window).keypress("c", function(e) {
if (!e.ctrlKey)
return;
console.info("CTRL + C detected !");
});
$(window).keypress("c", function(e) {
if (!e.ctrlKey)
return;
$("div").show();
});
/*https://gist.github.com/jeromyanglim/3952143 */
kbd {
white-space: nowrap;
color: #000;
background: #eee;
border-style: solid;
border-color: #ccc #aaa #888 #bbb;
padding: 2px 6px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2), 0 0 0 1px #ffffff inset;
-webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2), 0 0 0 1px #ffffff inset;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2), 0 0 0 1px #ffffff inset;
background-color: #FAFAFA;
border-color: #CCCCCC #CCCCCC #FFFFFF;
border-style: solid solid none;
border-width: 1px 1px medium;
color: #444444;
font-family: 'Helvetica Neue', Helvetica, Arial, Sans-serif;
font-size: 11px;
font-weight: bold;
white-space: nowrap;
display: inline-block;
margin-bottom: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style="display:none">
<kbd>CTRL</kbd> + <kbd>C</kbd> detected !
</div>
A partir del 2019, esto funciona en Chrome (por lo menos)
$(document).keypress(function(e) {
var key = (event.which || event.keyCode) ;
if(e.ctrlKey) {
if (key == 26) { console.log('Ctrl+Z was pressed') ; }
else if (key == 25) { console.log('Ctrl+Y was pressed') ; }
else if (key == 19) { console.log('Ctrl+S was pressed') ; }
else { console.log('Ctrl', key, 'was pressed') ; }
}
});