2009-08-21 21 views

Respuesta

211

Editar: Debido a que su elemento se inserta de forma dinámica, usted tiene que utilizar delegated on() como en el ejemplo, pero usted debe unirse al evento KeyDown, porque a medida que los comentarios @Marc, en el IE el evento de pulsación de tecla doesn 't capturar teclas que no sean de carácter:

$("#parentOfTextbox").on('keydown', '#textbox', function(e) { 
    var keyCode = e.keyCode || e.which; 

    if (keyCode == 9) { 
    e.preventDefault(); 
    // call custom function here 
    } 
}); 

Comprobar un ejemplo here.

+0

esto no funciona para mí en IE8 = \ –

+0

cuando presiono TAB en IE6 + el evento no se dispara (aunque se dispara en cualquier tecla alfanumérica) ... Necesito usar .live ('keypress', fn) –

+0

Si solo funciona con Live, quizás esté insertando su elemento de cuadro de texto dinámicamente, si el elemento ya está en la página, funcionará, consulte este ejemplo: http://jsbin.com/oguhe – CMS

12
$('#textbox').live('keypress', function(e) { 
    if (e.keyCode === 9) { 
     e.preventDefault(); 
     // do work 
    } 
}); 
+2

Además, para cancelar la acción por defecto, utilice e.preventDefault(); en la primera línea de la función. –

+0

esto no funciona para mí en IE6 + –

+0

@Jon, la pulsación de tecla no captura las claves que no son caracteres en IE – Marc

17

Ejemplo de trabajo en jQuery 1.9:

$('body').on('keydown', '#textbox', function(e) { 
    if (e.which == 9) { 
     e.preventDefault(); 
     // do your code 
    } 
}); 
+1

hacer 'e.preventDefault();' double para evitar insertar espacios en blanco en el cuadro de texto . – stil

7

métodos anteriores que se muestran no funcionó para mí, puede ser que estoy utilizando edad jQuery poco, luego, finalmente, el siguiente fragmento de código se muestra funciona para - publicar por si acaso alguien en mi misma posición

$('#textBox').live('keydown', function(e) { 
    if (e.keyCode == 9) { 
     e.preventDefault(); 
     alert('tab'); 
    } 
}); 
4

una parte importante de la utilización de una tecla en la pestaña sabiendo que se pestaña siempre tratará de hacer algo ya, no se olvide de "return false" al final.

Esto es lo que hice. Tengo una función que se ejecuta en .blur y una función que intercambia donde está mi foco de forma. Básicamente agrega una entrada al final del formulario y va allí mientras ejecuta los cálculos en el 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"); 
      } 
     } 
    }); 
2

Prueba esto:

$('#contra').focusout(function(){ 
    $('#btnPassword').focus(); 
}); 
1

Suponga que tiene cuadro de texto con el identificador txtName

$("[id*=txtName]").on('keydown', function(e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) { 
    e.preventDefault(); 
    alert('Tab Pressed'); 
} 
}); 
Cuestiones relacionadas