Tengo una etiqueta de anclaje que llama a una función de JavaScript.
Con o sin JQuery, ¿cómo puedo determinar si la tecla Mayús está presionada mientras se hace clic en el enlace?
El siguiente código NO funciona porque la pulsación de teclas solo se activa si se pulsa una "tecla real" (no la tecla Mayús). (Esperaba que se disparara si solo se presionaba la tecla Mayús).
var shifted = false;
$(function() {
$(document).keypress(function(e) {
shifted = e.shiftKey;
alert('shiftkey='+e.shiftkey);
});
$(document).keyup(function(e) {
shifted = false;
});
}
...
function myfunction() {
//shift is always false b/c keypress not fired above
}
javascript
jquery
Pete Alvin
fuente
fuente
shiftkey
lugar deshiftKey
:-)shift+click
, usefilter-altered-clicks
Respuestas:
fuente
shift
ya que la función regresafalse
. Necesitaba explícitamentereturn true
para permitir crtl + r, ctrl + s, ctrl + p etc.Aquí está el código clave para cada pulsación de tecla en JavaScript. Puede usar eso y detectar si el usuario ha presionado la tecla Shift.
No todos los navegadores manejan bien el evento keypress, así que use el evento key up o key down, así:
fuente
event.key
lugar! Le dará el carácter directamente, por ejemplo: "a", "1", "LeftArrow"document.addEventListener("keydown", function(e){ console.log(e.which); });
Para los eventos del mouse, sé que en Firefox al menos la propiedad "shiftKey" en el objeto de evento le dirá si la tecla shift está presionada. Está documentado en MSDN pero no lo he probado desde hace mucho tiempo, así que no recuerdo si IE lo hace bien.
Por lo tanto, debería poder verificar "shiftKey" en el objeto de evento en su controlador de "clic".
fuente
Tuve un problema similar al intentar capturar un 'shift + click' pero como estaba usando un control de terceros con una devolución de llamada en lugar del
click
controlador estándar , no tenía acceso al objeto de evento y su asociadoe.shiftKey
.Terminé manejando el evento de mouse down para registrar el shift-ness y luego usándolo más tarde en mi devolución de llamada.
Publicado por si acaso alguien más termina aquí buscando una solución a este problema.
fuente
El
keypress
evento no es activado por todos los navegadores cuando hace clic en shifto ctrl, pero afortunadamente elkeydown
evento es .Si cambia el
keypress
con,keydown
es posible que tenga mejor suerte.fuente
He usado un método para probar si se presiona alguna tecla específica almacenando los códigos de tecla presionados actualmente en una matriz:
Aquí está el jsfiddle
fuente
La excelente biblioteca de JavaScript KeyboardJS maneja todo tipo de pulsaciones de teclas, incluida la tecla MAYÚS. Incluso permite especificar combinaciones de teclas, como presionar primero CTRL + xy luego a.
Si desea una versión simple, diríjase a la respuesta de @tonycoupland ):
fuente
Esto funciona muy bien para mí:
fuente
Para verificar si se presiona la tecla shift mientras se hace clic con el mouse , hay una propiedad exacta en el objeto de evento de clic : shiftKey (y también para ctrl y alt y meta key): https://www.w3schools.com/jsref/event_shiftkey .áspid
Entonces usando jQuery:
fuente
Un enfoque más modular más la capacidad de mantener su
this
alcance en los oyentes:fuente
Si alguien busca detectar una tecla determinada y necesita conocer el estado de los "modificadores" (como se llaman en Java), es decir, las teclas Shift, Alt y Control, puede hacer algo como esto, que responde a la
keydown
tecla F9, pero solo si ninguna de las teclas Shift, Alt o Control está presionada actualmente.fuente
manifestación
fuente