2011-01-05 13 views
42

Estoy tratando de crear accesos directos en el sitio web que estoy creando. Sé que puedo hacerlo de esta manera:jquery: pulsación de tecla, ctrl + c (o algún combo como ese)

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 combinado pulsación de tecla:

$(document).keypress("c",function() { 
    alert("Just C was pressed.."); 
}); 

así que quiero saber si mediante el uso de esta segunda ejemplo, podría hacer algo como:

$(document).keypress("ctrl+c",function() { 
    alert("Ctrl+C was pressed!!"); 
}); 

¿Esto es posible? Lo probé y no funcionó, ¿qué estoy haciendo mal?

Respuesta

69

Otro enfoque (sin complemento necesario) que sólo tiene que utilizar .ctrlKey propiedad del event object que se pasa en Indica si Ctrl se ha pulsado en el momento del evento, así:.

$(document).keypress("c",function(e) { 
    if(e.ctrlKey) 
    alert("Ctrl+C was pressed!!"); 
}); 
+0

pero no hay nada como: '.keypress (" c + s ",' donde cuando presiono cYs hará algo? Y en su código tengo que presionarlos al mismo tiempo, tengo que presionar 1 tecla y presione otra tecla, realmente estoy creando un menú emergente cuando presiono un cierto combo de tecla, así que tal vez mantenga presionado s y haga clic izquierdo o lo que sea, algo así, no estoy seguro de qué tecla combo i ' Voy a usar todavía. –

+4

@ android.nick - no está incorporado en el núcleo de jQuery, no, necesitarás un complemento para * que *, pero para las teclas ctrl, alt y shift, puedes usar '.ctrlKey', '.altKey' y' .shiftKey' propiedades –

+0

@nick este código no funciona en IE8. – ravi404

5

Pruebe el complemento Jquery Hotkeys en su lugar - hará todo lo que necesite.

jQuery teclas de acceso rápido es un plug-in que le agregar fácilmente y eliminar controladores de eventos de teclado cualquier parte del código apoyo 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'); }); 
+2

+1 No es una buena práctica de obligar Ctrl + C, sin embargo, o cualquier otra combinación de tecla de acceso rápido predefinida. Tratar con cuidado. –

+0

@Pekka buen punto – Andy

+0

estuvo de acuerdo, solo era un ejemplo, estoy tratando de descubrir la mejor combinación de teclas para un menú emergente con el cursor del mouse. –

1

Hay un plugin para jQuery llamado "teclas de acceso rápido" lo que le permite vincularse a combinaciones de teclas.

¿Hace esto lo que está buscando?

Jquery HotKeys - Google Code

+0

un plugin es un poco exagerado por la simplicidad de lo que necesito, especialmente a 4.4kb, es demasiado, gracias. –

1
<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> 
+1

¿Consideraría agregar alguna narración para explicar por qué funciona este código y qué hace que sea una respuesta a la pregunta? –

+0

De acuerdo con las pruebas que acabo de hacer, parece que IE8 no pasa presionado por * algunas * teclas especiales (Ctrl-C - no, Ctrl X y V - sí). Mientras que el * keydown * es * pasado, entonces esta respuesta funciona. –

3

no puede utilizar Ctrl +C por j Consulta, 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"); 
     }); 


}); 
29

Soy un poco tarde a la fiesta, pero aquí está 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"); 
    } 
}); 
+6

Esto funcionó para mí usando jQuery 1.11.2. La respuesta aceptada no. – sarme

+2

Estoy de acuerdo en que este método funciona mejor con la versión posterior de jQuery – asherrard

+2

Mac's ⌘ es e.metaKey tan '(e.metaKey || e.ctrlKey) && ...' trabajado para mí – kevnk

0

En mi caso, estaba buscando una tecla Ctrl Keydown y haga clic en evento. Mi jQuery se ve así:

$('.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.

0

no pude 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'); 
    } 
}); 
Cuestiones relacionadas