2011-06-23 32 views

Respuesta

6

Ryan's example de poner la cancelación en caso keypress no funcionó para mí, pero podemos ponerlo en la opción de autocompletar select:

select: function(e, ui) { 
    if(e.keyCode === 9) return false; 
    // other code... 
} 
1

El tabulador no selecciona realmente el elemento actual, sino que mueve el cursor al siguiente elemento que se puede tabular. Así que lo que hay que hacer es desactivar la pestaña para la función de autocompletar:

Lock tab key with javascript?

Algo como esto está funcionando para mí, es posible que tenga que modificar un poco más.

http://jsfiddle.net/Uubn6/

Básicamente, se captura el evento KeyDown antes de pasarlo al manejador de autocompletar keydown. Cuando lo captura, puede hacer lo que quiera (pasarlo o no).

+0

Esto no lo hace suena bien Si fue el evento de desenfoque el que desencadenó el evento de selección (enfocando el siguiente elemento a través de la pestaña), también se activaría cuando haga clic * en otro elemento, pero eso no sucede. Además, en tu violín me estás impidiendo tabular al siguiente elemento, que es exactamente lo contrario de lo que quiero. Quiero poder ingresar a la siguiente entrada * sin * activar una selección. – mpen

+0

Aunque su ejemplo * no * impide el autocompletado ... – mpen

4

Cuando utiliza el modificador .autocomplete() en jquery-ui, establece el controlador de teclas para su cuadro de texto de entrada de la siguiente manera. El self.menu.select establece el cuadro de texto con el valor actualmente resaltado en la lista de auto-completar

.bind("keydown.autocomplete", function(event) { 
... 
switch(event.keyCode) { 
... 
case keyCode.TAB: 
    if (!self.menu.active) { 
     return; 
    } 
    self.menu.select(event); 
    break; 
... 
    } 
} 

Así que lo que hay que hacer es asegurarse de que este controlador no recibe llamada. Pude hacer esto agregando un controlador a la tecla que devuelve falso del manejador si la pulsación de tecla es TAB.

$("#tags").autocomplete({ 
     source: availableTags 
    }); 
$("#tags").keypress(function(e){ 
    if(e.keyCode == keyCode.TAB) { 
     e.stopImmediatePropagation(); 
    } 
}); 

You can see the result here.

+0

se olvidó de incluir jquery ui en jsfiddle. Lo hice y no funcionó para mí. – zsalzbank

+0

Acabo de actualizar el enlace. Ahora debería apuntar a una jsfissle que incluye la biblioteca jquery-ui. –

+0

Funciona cuando agregamos la biblioteca (http://jsfiddle.net/mnbayazit/TmZVw/3/) pero la ventana permanece abierta (¡mal!). Además, tu violín está completamente en desacuerdo con lo que escribiste en tu respuesta (desenfoque desatado). – mpen

Cuestiones relacionadas