2011-08-30 10 views
11

Tengo un formulario que utiliza el complemento de IU de autocompletar de jquery, http://jqueryui.com/demos/autocomplete/, que funciona bien excepto cuando presiona la tecla enter para seleccionar un elemento en la autocompleta lista, envía el formulario.Formulario para dejar la tecla 'enter' al usar el widget de autocompletar de jquery ui

Estoy usando esto en un sitio de formularios web .NET, por lo que puede haber un manejo de Javascript asociado con el formulario que .NET está inyectando que está anulando el material de jQuery (estoy especulando aquí).

Respuesta

14

Puede usar un controlador de eventos en él.

$("#searchTextBox").keypress(function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 13) { //Enter keycode 
     return false; 
    } 
}); 

véase: jQuery Event Keypress: Which key was pressed?

también: http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/javascript-char-codes-key-codes.aspx para la lista de códigos de teclas

+0

¡Buen ejemplo! Pruebe también '... if (code == $ .ui.keyCode.ENTER) {return false; } ... '. Mira impulsoras https://api.jqueryui.com/jQuery.ui.keyCode/ .. JZM gracias – KingRider

4

Una forma es presionar la tecla e ignorarla si se trata de la tecla Intro.

+1

Pero sólo quieren hacer caso omiso de la tecla Intro si se pulsa la hora de seleccionar una opción de la lista de autocompletar. Si el usuario no está enfocado en la lista de opciones de autocompletar, entonces _do_ quiero que el formulario se envíe. –

+1

@JohnieKarr: Me apetece verte responder a una pregunta que estaba buscando ... –

5
$("#autocomplete_field_id").keypress(function(event){ 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if (keycode == '13') { 
    event.preventDefault(); 
    event.stopPropagation();  
    } 
}); 
2

El puesto respuesta as ayudó a resolver mi problema. Si bien debe observar que el código as provide debe existir antes del $('input').autocomplete(*****), de lo contrario no recibiría ningún efecto.

2

Si aún desea enviar la clave para entrar, después de que se hizo la selección de autocompletar,

if (evt.keyCode === 13 && !$('.ui-autocomplete').is(':visible')) { 
    $('.ui-button:first').click(); 
} 
evt.stopPropagation(); 
+2

Éste no funciona para mí, ya que el cuando el evento llega a mi función de devolución de llamada, autocompletar ya no es visible. –

Cuestiones relacionadas