Quiero capturar la tecla TAB, cancelar la acción predeterminada y llamar a mi propia función de JavaScript.
Quiero capturar la tecla TAB, cancelar la acción predeterminada y llamar a mi propia función de JavaScript.
Respuestas:
Editar: dado que su elemento se inserta dinámicamente, debe usar delegadoon()
como en su ejemplo, pero debe vincularlo al evento keydown, porque como comenta @Marc, en IE el evento de pulsación de tecla no captura teclas que no son caracteres:
$("#parentOfTextbox").on('keydown', '#textbox', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
e.preventDefault();
// call custom function here
}
});
Mira un ejemplo aquí .
Ejemplo de trabajo en jQuery 1.9:
$('body').on('keydown', '#textbox', function(e) {
if (e.which == 9) {
e.preventDefault();
// do your code
}
});
e.preventDefault();
doble para evitar la inserción de espacios en blanco en el cuadro de texto.
$('#textbox').live('keypress', function(e) {
if (e.keyCode === 9) {
e.preventDefault();
// do work
}
});
Los métodos que se muestran arriba no me funcionaron, puede ser que esté usando jquery un poco viejo, y finalmente el fragmento de código que se muestra a continuación funciona para publicar solo en caso de que alguien en mi misma posición
$('#textBox').live('keydown', function(e) {
if (e.keyCode == 9) {
e.preventDefault();
alert('tab');
}
});
Una parte importante del uso de una tecla hacia abajo en la pestaña es saber que la pestaña siempre intentará hacer algo, no se olvide de "devolver falso" al final.
Aquí esta lo que hice. Tengo una función que se ejecuta en .blur y una función que intercambia donde está mi foco de formulario. Básicamente agrega una entrada al final del formulario y va allí mientras ejecuta cálculos en desenfoque.
$(this).children('input[type=text]').blur(timeEntered).keydown(function (e) {
var code = e.keyCode || e.which;
if (code == "9") {
window.tabPressed = true;
// Here is the external function you want to call, let your external
// function handle all your custom code, then return false to
// prevent the tab button from doing whatever it would naturally do.
focusShift($(this));
return false;
} else {
window.tabPressed = false;
}
// This is the code i want to execute, it might be different than yours
function focusShift(trigger) {
var focalPoint = false;
if (tabPressed == true) {
console.log($(trigger).parents("td").next("td"));
focalPoint = $(trigger).parents("td").next("td");
}
if (focalPoint) {
$(focalPoint).trigger("click");
}
}
});
Puede capturar una pestaña de evento utilizando esta API JQuery.
$( "#yourInputTextId" ).keydown(function(evt) {
if(evt.key === "Tab")
//call your function
});
Esto funcionó para mí:
$("[id*=txtName]").on('keydown', function(e) { var keyCode = e.keyCode || e.which; if (keyCode == 9) { e.preventDefault(); alert('Tab Pressed'); } });