Saltar al contenido

jQuery Trigger keyCode Ctrl+Shift+z & Ctrl+z en el área de texto wysiwyg

Nuestro grupo de trabajo ha pasado mucho tiempo buscando para darle soluciones a tu pregunta, te regalamos la respuestas de modo que esperamos servirte de gran apoyo.

Solución:

Usar e.which que ha sido normalizado entre navegadores por jquery.

$(document).keydown(function(e)
      if( e.which === 90 && e.ctrlKey && e.shiftKey )
         console.log('control + shift + z'); 
      
      else if( e.which === 90 && e.ctrlKey )
         console.log('control + z'); 
                
); 

Si desea activar el evento, entonces debería ser algo como esto:

HTML






  
  
  


JavaScript

var t = document.getElementById('t'), //textarea
    bcsz = document.getElementById('bcsz'), //button ctrl shift z
    bsz = document.getElementById('bcz'),  // button ctrl z
    csz = document.createEvent('KeyboardEvents'), //ctrl shift z event
    cz = document.createEvent('KeyboardEvents'); // ctrl z event

csz.initKeyboardEvent(
           'keydown', 
           true,     // key down events bubble 
           true,     // and they can be cancelled 
           document.defaultView,  // Use the default view 
           true,        // ctrl 
           false,       // alt
           true,        //shift
           false,       //meta key 
           90,          // keycode
           0
          );  
cz.initKeyboardEvent(
           'keydown', 
           true,     // key down events bubble 
           true,     // and they can be cancelled 
           document.defaultView,  // Use the default view 
           true,        // ctrl 
           false,       // alt
           false,        //shift
           false,       //meta key 
           90,          // keycode
           0
          );  

bcz.addEventListener('click', function()
  t.dispatchEvent(cz); 
, false);

bcsz.addEventListener('click', function()
  t.dispatchEvent(csz); 
, false);

MIRA EL ENLACE JSBIN

Pero parece que no funciona. No tengo más tiempo para gastar en esto, pero sí, es un problema de seguridad. Vería estos documentos en MSDN, W3C y MDN para ver si hay una forma real de hacerlo.

Ctrl y Mayús keys están incluidos en key eventos, pero el código clave se refiere a qué key tu presionas Ctrl y Shift son control keys y tienen los suyos keys en key eventos.

Por ejemplo, si presiona Ctrl+Shift+Z entonces el evento keydown sería este:


    altGraphKey: false
    altKey: false
    bubbles: true
    cancelBubble: false
    cancelable: true
    charCode: 0
    clipboardData: undefined
    ctrlKey: true
    currentTarget: null
    defaultPrevented: true
    detail: 0
    eventPhase: 0
    keyCode: 90
    keyIdentifier: "U+004C"
    keyLocation: 0
    layerX: 0
    layerY: 0
    metaKey: false
    pageX: 0
    pageY: 0
    returnValue: false
    shiftKey: true
    srcElement: HTMLTextAreaElement
    target: HTMLTextAreaElement
    timeStamp: 1318460678544
    type: "keydown"
    view: DOMWindow
    which: 90
    __proto__: KeyboardEvent

Como puedes ver hay dos key por Ctrl y Shift keys que son true porque esos keys fueron presionados mientras presionaban Z.

Entonces puedes detectar este evento así:

document.addEventListener('keydown', function(event)
  if(event.keyCode == 90 && event.ctrlKey && event.shiftKey)
   // do your stuff
  
, false);

Nota: Debes escuchar keydown para múltiples key atajos de teclado. keyup no funcionaría

Acuérdate de que tienes la opción de comentar si diste con la contestación.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *