2011-05-11 11 views

Respuesta

11

He aquí un artículo sobre cómo detectar cromo: http://javascriptly.com/2008/09/javascript-to-detect-google-chrome/

Y esta pregunta: Disable tab key on a specific div podría ayudarle sobre cómo desactivar la tecla de tabulación. Si puede combinar ambos, probablemente lo haya logrado.

La función de bloqueo se convertiría en algo como:

$('.textarea').on('keyup mouseup', function(e) { 
    if(e.which == 9) { e.preventDefault(); } 
}); 

e.which = 9 es la tecla de tabulación de acuerdo con el último eslabón dado. Si puede ajustar la detección del navegador a su alrededor, creo que tiene su ejemplo de trabajo.

+2

estoy haciendo preventDefault pero simplemente no trabajo :(lo estoy haciendo en una celda de la tabla – Shaheer

+0

tienes una examepl solamente, no está seguro de lo que está tratando de hacer con una celda de la tabla, o qué sucede con él al presionar tab? –

+0

estoy haciendo una cuadrícula editable, cuando el usuario hace clic en una celda de la tabla y presiona pestaña, la siguiente celda debe resaltarse, esto funciona bien, pero Chrome también establece el foco en otros elementos y con cada pestaña, Chrome mueve centrarse en lo siguiente, no quiero que eso suceda – Shaheer

52
input.keydown(function(event){ 
    if (event.keyCode === 9) { 
     event.preventDefault(); 
    } 
}) 

Al activar la tecla demasiado tarde, debe llamar al evento en el teclado. Eso funcionó para mí.

+0

Esto funcionó para mí, la respuesta aceptada no. – James

+1

Encontré esto después de que la respuesta aceptada no funcionó. De hecho, el teclado es demasiado tarde. Gracias por el consejo :) –

+0

Eso funciona! Situación peculiar esto es. Una solución perfectamente sensata aquí. –

1

Esto podría ser un poco tarde, pero la combinación de la respuesta de @ EvgueniNaverniouk y comentario @K ._ 's (en la respuesta de @ Joshua_Pendo), se determina que se debe utilizar onkeydown y el más reciente en lugar de event.keyevent.keyCode. Lo que event.key hace es devolver el nombre de la clave en lugar del código. Por ejemplo, la clave tab se devolverá como "Pestaña" (Esto distingue entre mayúsculas y minúsculas). Aquí está el código de trabajo terminado:

function checkForTab(event) { 
    if (event.key == "Tab") { 
     event.preventDefault(); 
    } 
    else { 
     //whatever stuff if not Tab 
    } 
} 
document.getElementById("element").onkeydown = checkForTab(event); 

function checkForTab(event) { 
 
\t if (event.key == "Tab") { 
 
\t \t event.preventDefault(); 
 
     document.getElementById('element').value += " Also notice this text appears every time you press tab!"; 
 
\t } 
 
\t else { 
 
\t \t //whatever stuff if not Tab 
 
\t } 
 
} 
 
document.getElementById('element').onkeydown = checkForTab; 
 
//Trick is to use keydown and use event.key instead of keyCode
<textarea id="element" style="width: 300px; height: 100px;">Press tab key here, you'll see default action doesn't occur!</textarea>

Ejecutar el fragmento de código anterior para ver un ejemplo de lo que quiero decir. Ahora puede usar un código como este para reemplazar la acción predeterminada de Tab con la acción que agrega espacios a un área de texto. Nota: el motivo por el que utilizo .key en lugar de .keyCode es porque .keyCode ahora está obsoleto como se menciona en @ K._. Espero que esto ayude!

+0

solo una pista: esto me fue mejor que todas las respuestas que dije al momento de escribir esto. La respuesta de @EvgueniNaverniouk ayudó, pero aun así no funcionó al 100%. – IamGuest

Cuestiones relacionadas