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?

¿Fue útil?

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?

Jquery teclas de acceso rápido - Google Code

<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.

introducir descripción de la imagen aquí

$(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') ; }
    }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top