Lo que llamas "comportamiento por defecto", o sea: los aceleradores
básicos de la UI del browser *no se pueden capturar* con JS. Algunas
combinaciones de teclas son "propiedad" del browser - Ctrl+S (o Ctrl+G),
para guardar, Ctrl+O para abrir, Ctrl+D para marcar la página, etc. Cada
browser tiene combinaciones -posiblemente distintas- para algunas
acciones de UI y estas combinaciones nunca se envían como mensajes de
keystrokes al código JS. En resumen: puedes capturar la combinación de
teclas que quieras, excepto las usadas por el browser.
Y el problema es *peor aún*: algunos addons (plugins o extensiones
del browser) pueden registrar aceleradores (así se llaman las
combinaciones de teclas) para sí mismos. Por ejemplo, Firebug usa F10,
F12, F11, y algunas más. Esos keystrokes no se pueden capturar desde JS.
Sorry, tendrás que usar otras teclas para lo que deseas.
Una respuesta más completa:
http://stackoverflow.com/questions/7295508/javascript-capture-browser-shortcuts-ctrlt-n-w
Saludos
Lian
PS: Lo de más arriba es cierto "entre comillas": con Google Chrome se
pueden abrir páginas en "application mode" - sin bordes, ni menú del
browser, etc, de manera que parezcan apps nativas de escritorio. Esto lo
usan mucho para las apps del Google Store, sobre todo para juegos. En
este modo *sí* se puede capturar cualquier combinación de teclas. Nunca
lo he probado, solo he leído que es posible.
El 10/12/13 14:13, juan.mej...@reduc.edu.cu escribió:
Hola. Tengo un problemilla con JavaScript y me preguntaba si alguien
podia ayudarme con él. Estoy tratando de detectar eventos del teclado
y ejecutar funciones para ellos. Por ejemplo, Control + S = guardar(),
Control + N = nuevo(), etc. Hasta ahora logré detectar los eventos sin
problema (evento onkeydown), pero necesito que si decido "escuchar" la
combinación "Control + S" no ejecute el comportamiento por defecto,
que es guardar la página. Probé a poner preventDefault(), pero nada de
nada. Con jQuery sería fácil, pero pesa +50kb que no utilizo, por lo
que incluirlo sería un lujo, es por eso que quiero usar JavaScript
puro. Este es mi código:
<script type = "text/javascript">
var keystrokes = [];
var keystroke = function (key, callback) {
this.key = key;
this.callback = callback;
}
function handleKeyDown (e) {
for (i in keystrokes) {
if(e.keyCode == keystrokes[i].key.charCodeAt(0) &&
e.ctrlKey) {
keystrokes[i].callback.apply();
if (e.stopPropagation) e.stopPropagation();
if (e.preventDefault) e.preventDefault();
}
}
}
function listenEvent(eventTarget, eventType, eventHandler) {
if (eventTarget.addEventListener) {
eventTarget.addEventListener(eventType, eventHandler,false);
} else if (eventTarget.attachEvent) {
eventType = "on" + eventType;
eventTarget.attachEvent(eventType, eventHandler);
} else {
eventTarget["on" + eventType] = eventHandler;
}
}
function bind(key, callback) {
keystrokes.push(new keystroke(key, callback));
}
listenEvent(document, "keydown", handleKeyDown);
bind ("S", function () {alert("Se presionó S");});
bind ("N", function () {alert("Se presionó N");});
</script>
______________________________________________________________________
Lista de correos del Grupo de Usuarios de Tecnologías Libres de Cuba.
Gutl-l@jovenclub.cu
https://listas.jovenclub.cu/cgi-bin/mailman/listinfo/gutl-l
--
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que está limpio.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL:
<http://listas.jovenclub.cu/pipermail/gutl-l/attachments/20131210/e8ebdf04/attachment.html>
______________________________________________________________________
Lista de correos del Grupo de Usuarios de Tecnologías Libres de Cuba.
Gutl-l@jovenclub.cu
https://listas.jovenclub.cu/cgi-bin/mailman/listinfo/gutl-l