2012-02-24 19 views
10

Tengo un formulario con algunos campos comunes como "email". Tengo un javascript que captura la clave de retorno (13) y envía el formulario, pero se observó el mismo efecto cuando se usaba la propiedad defaultButton en el panel de host.firefox autocompletar 'enter' presionar tecla en autocompletar desencadenar enter on textbox

Si el usuario está en IE y está escribiendo su dirección de correo electrónico, entonces selecciona un elemento del autocompletado en línea del navegador al presionar ENTER, no se envía ninguna tecla a Javascript. BUENO.

En Firefox, sin embargo, el cuadro de texto recibe la tecla ENTRAR y desea enviar el formulario, que no está completo.

¿Alguien sabe cómo detener esto aparte de deshabilitar la función de autocompletar? No puedo encontrar una manera de detectar que la pulsación de tecla se origina realmente en el cuadro de lista autocompletar.

Estoy usando asp.net y jQuery.

Editar - para aclarar: Al presionar Intro en un elemento en autocompletar NO debe enviar el formulario. El comportamiento de IE es correcto (¡por una vez!).

Mi controlador de eventos en sí mismo es simplemente:

en la tecla de arriba (pulsación intentado también) - Si (e.which == 13) submitForm();

El problema es que no sé cómo detectar que la prensa ENTER en realidad procedían de control autocompletar

+1

¿Esto podría ayudarlo? http://stackoverflow.com/questions/270494/enter-button-does-not-submit-form-ie-only-asp-net – Niklas

+0

Creo que el problema proviene de e handler. El primer comentario que puedes ayudar. – sinanakyazici

+0

puede mostrar el javascript que contiene la tecla enter. Las claves se manejan de forma diferente en los navegadores – Aristos

Respuesta

2

Se puede almacenar el valor del campo en la tecla hacia abajo y, a continuación, comprobar de nuevo en la tecla hacia arriba. Si más de 1 carácter es diferente en la cadena de una pulsación de tecla, es seguro asumir que se ha seleccionado un elemento de autocompletar y se debe ignorar la entrada.

El único caso en que esto no funcionaría es cuando tiene un campo como: [email protected] y está seleccionando un elemento de autocompletar con solo la última letra agregada, la tecla Intro enviará el formulario involuntariamente.

Espero que nos arranque al menos. Estoy tratando de resolver una solución a prueba de balas también. Actualizaré si encuentro uno.

EDIT

Tornillo arriba. Lo arreglaron. Si comprueba la tecla Intro en la tecla arriba, y el valor del campo de entrada no es el mismo en ambas teclas hacia abajo/arriba, puede asumir que se seleccionó un elemento de autocompletar.

var loginCurrentInput = ''; 

$('input').keydown(function(e) { 

    loginCurrentInput = $(this).val(); 

} 

$('input').keyup(function(e) { 

    //if enter key pressed 
    if(e.keyCode == 13) { 

    //check for changed input value 
    if($(this).val() != loginCurrentInput) { 

     loginCurrentInput = $(this).val(); 
     return false; 

    } 

    $('#button').trigger('click'); 

    } 

} 
Cuestiones relacionadas