2012-02-24 23 views
10

Mam formularz z niektórymi typowymi polami, takimi jak "e-mail". Mam javascript, który przechwytuje klucz powrotu (13) i przesyła formularz, ale ten sam efekt zaobserwowano podczas używania właściwości defaultButton na panelu hosta.Autouzupełnianie autouzupełniania firefox wpisywanie hasła autouzupełniania wpisywanie w polu tekstowym

Jeśli użytkownik jest na IE i wpisuje swój adres e-mail, a następnie wybiera element z wbudowanej autouzupełniania przeglądarki, naciskając klawisz ENTER, żadne naciśnięcie nie jest wysyłane do Javascript. DOBRY.

W przeglądarce Firefox pole tekstowe otrzymuje jednak klawisz ENTER i chce przesłać formularz, który nie jest kompletny.

Czy ktoś wie, jak zatrzymać to inne niż wyłączanie autouzupełniania? Nie mogę znaleźć sposobu na wykrycie, że keypress rzeczywiście pochodzi z listy autouzupełniania.

Używam asp.net i jQuery.

Edytuj - aby wyjaśnić: Naciśnięcie klawisza Enter na przedmiocie w autouzupełnianiu NIE powinno przesyłać formularza. Zachowanie IE jest poprawne (raz!).

Moja obsługi zdarzeń w sobie jest po prostu:

na przycisk UP (próbował keypress zbyt) - if (e.which == 13) submitForm();

Problem jest, nie wiem, w jaki sposób wykryć, że prasa ENTER rzeczywiście pochodził z kontrolą autouzupełniania

+1

Czy to może ci pomóc? http://stackoverflow.com/questions/270494/enter-button-does-not-submit-form-ie-only-asp-net – Niklas

+0

Myślę, że problem wynika z obsługi e. Pierwszy komentarz, który możesz pomóc. – sinanakyazici

+0

można wyświetlić javascript, które posiadają wpis. Klawisze są różnie obsługiwane w przeglądarkach. – Aristos

Odpowiedz

2

Można zapisać wartość pola przy naciśniętym klawiszu, a następnie ponownie sprawdzić klawisz. Jeśli więcej niż 1 znak jest różny w ciągu od jednego naciśnięcia klawisza, można bezpiecznie założyć, że element autouzupełniania został wybrany, a wpis powinien zostać zignorowany.

Jedynym przypadkiem, w którym to nie zadziałałoby, jest pole, na przykład: [email protected], podczas wybierania elementu autouzupełniania z dodaną tylko ostatnią literą, klawisz Enter spowoduje niezamierzone przesłanie formularza.

Mam nadzieję, że przynajmniej zaczniemy. Próbuję również rozwiązać rozwiązanie kuloodporne. Będę aktualizował, jeśli go znajdę.

EDIT

Screw powyżej. Posortowałem to. Jeśli sprawdzisz klawisz Enter po naciśnięciu klawisza, a wartość pola wejściowego nie będzie taka sama dla obu klawiszy w dół/w górę, możesz założyć, że element autouzupełniania został wybrany.

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'); 

    } 

} 
Powiązane problemy