HTML: dlaczego przeglądarka Android pokazuje "Go" zamiast "Next" na klawiaturze?

Mam formularz logowania HTML, który zawiera następujące elementy (w tej kolejności):

  • input type=text (Nazwa użytkownika)
  • input type=password (hasło)
  • input type=submit (przycisk logowania)

Dlaczego przeglądarka Android pokazuje przycisk " Go "w miękkiej klawiaturze zamiast przycisku" Next", gdy fokus jest w text input? Powoduje to, że użytkownik nie loguje się bardzo łatwo, ponieważ po wpisaniu nazwy użytkownika, użytkownik naciska prawy dolny przycisk na klawiaturze (zwykle poprawne działanie) i formularz zostanie przesłany z pustym hasłem, które oczywiście nie zadziała. [Takie zachowanie miałoby sens, gdyby moja przeglądarka była ustawiona na zapamiętywanie haseł, a menedżer haseł mógłby je wypełnić. Jednak tutaj tak nie jest, ponieważ możesz sprawdzić się poniżej.]

Chciałbym, aby tekst typu wejściowego miał przycisk "Dalej", a hasło typu wejściowego (ostatnie wejście przed submit) miało przycisk "Idź".

Przykład problemu formularz jest na https://peda.net/:login (ten formularz zawiera kod do wykrywania klawisza "Enter" dla wejścia i zapobiega wysyłaniu formularza, chyba że ostatnie widoczne wejście formularza jest skupione).

Czy znasz prawdziwe rozwiązanie tego problemu? Wiem, że gdybym implementował natywną aplikację, użyłbym android:imeOptions="actionNext" (Zobacz Jak zmienić przycisk klawiatury softkey Androida " idź " na "Dalej"). Jednak w tym przypadku jest to formularz HTML i domyślna przeglądarka Androida.

Problem jest widoczny o co najmniej następujących konfiguracjach:

  • Aplikacja systemu"przeglądarka" działająca na Androida 2.3.4 (Cyanogenmod 7)
  • Aplikacja systemu"przeglądarka" działająca na Androida 4.2.2 (Cyanogenmod 10.1)
  • Aplikacja systemu"przeglądarka" działająca na Androida 4.3.1 (Cyanogenmod 10.2 m1)
  • [[8]} aplikacja systemowa" Browser " (AOSP Browser) działająca na Androidzie 4.4.2 (Cyanogenmod 11.0 m3)
  • aplikacja systemowa" Browser " (AOSP Browser) działająca na Androidzie 5.5.1 (Cyanogenmod 12.1 )[ ma ikonę strzałki zamiast Worda "Go"]
  • [[8]} aplikacja systemowa" Browser "(Przeglądarka AOSP) działająca na Androidzie 6.0.1 (Cyanogenmod 13.0) [ma ikonę strzałki zamiast słowa "Go"]
Author: Community, 2011-07-01

6 answers

Przeglądarka Android zawsze wyświetla pola wejściowe Go, ponieważ niektóre formularze w Internecie (zwłaszcza pola wyszukiwania) nie mają przycisku submit i mogą być aktywowane tylko przez naciśnięcie Enter (Go jest równoznaczne z Enter).

Zamiast tego niektóre wersje Androida będą wyświetlać klawisz tab w prawym dolnym rogu klawiatury, aby ułatwić nawigację między polami formularza.

Nie sądzę, żeby można było zapobiec któremukolwiek z tych zachowań.

Dwa możliwe obejścia:

  1. Użycie JavaScript, aby zignorować złożenie formularza logowania, dopóki oba wejścia nie będą niepuste:

    <form name="loginForm" onsubmit="return document.loginForm.user.value != '' && document.loginForm.pass.value != ''">
        <input type="text" name="user">
        <input type="password" name="pass">
        <input type="submit" value="Login">
    </form>
    
  2. Najczystszym rozwiązaniem byłoby ustawienie obu wejść, które mają być wymagane przy użyciu nowego atrybutu HTML5 required - Ale[19]} przeglądarka Android jeszcze tego nie obsługuje. Jednak dobrym podejściem byłoby uzupełnienie wymaganego atrybutu o skrypt JavaScript, taki jak opisany przez CSSKarma.

 22
Author: John Mellor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-18 14:19:32

Aby dodać do odpowiedzi Johna, Android zawsze dodaje "Go" do wejść tekstowych i zawsze dodaje "Next" do wejść liczbowych . Chciałbym usłyszeć, jak osoba odpowiedzialna za ten wybór wyjaśni swoją logikę.

Projekt softkeyboard jest po prostu kiepski pod tym względem, ponieważ każdy użytkownik, z którym do tej pory testowałem, myślał, że duży niebieski przycisk na klawiaturze musi być przyciskiem, który zabierze cię do następnego pola formularza, a następnie do ostatniego pola formularza pozwala przesłać formularz.

IOS to nawet gorzej pod tym względem, ponieważ oferują przycisk "Idź" z każdym polem formularza i nie ma sposobu na zakładkę przez pola. Fajnie, że Apple lubi robić Komputery prostymi dla ludzi, ale czasami zakładając, że ludzie lubią to proste, można założyć, że wszyscy ludzie są idiotami.

Sorry za ten bełkot. Mam coś konstruktywnego do zaoferowania:

Jeśli twoim ostatnim polem formularza jest type = number, to jest mały hack, który będzie działał zarówno na Androidzie, jak i iOS: dodaj invisible text input to the form with onfocus= " $('#thisForm').submit();". W Androidzie to pole będzie krótko migać w widoku: w iOS nie będzie. Aby sytuacja na Androidzie była bardziej przyjemna, możesz ustawić wartość dla wprowadzania tekstu, np. "zamykanie tego formularza", lub możesz ustawić jego szerokość na 0, co spowoduje, że pole formularza nie będzie całkiem szerokości 0, ale nadal będzie bardzo małe.

Straszny hack, ale hej, zwalić to na ludzi UI w Google i Apple.

 48
Author: Wytze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-02 13:33:53

Zobacz Zastąp przycisk Go na miękkiej klawiaturze przyciskiem Next w Phonegap .

Aby uzyskać szybką nawigację zobacz tenplunker . Aby wykonać pełny kod

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>


<form action="" id="form">
First name: <input type="text" name="firstname">
Last name: <input type="text" name="lastname">
  <select name="select" readonly="readonly">
  <option>Select Something</option>
  </select>
  Last name: <input type="text" name="lastname" disabled="disabled">
Select <select name="select" id="selectBox">
               <option>Select Something</option>
       </select>
    Last name: <input type="text" name="lastname">
Select <select name="select" readonly="readonly">
  <option>Select Something</option>
  </select>
  <button type="submit">Submit</button> 
</form>

<script>
(function($) {
    $.fn.enterAsTab = function(options) {
        var settings = $.extend({
            'allowSubmit': false
        }, options);
        $(this).find('input, select, textarea, button').live("keydown", {localSettings: settings}, function(event) {
            if (settings.allowSubmit) {
                var type = $(this).attr("type");
                if (type == "submit") {
                    return true;
                }
            }
            if (event.keyCode == 13) {
                var inputs = $(this).parents("form").eq(0).find(":input:visible:not(:disabled):not([readonly])");
                var idx = inputs.index(this);
                if (idx == inputs.length - 1) {
                    idx = -1;
                } else {
                    inputs[idx + 1].focus(); // handles submit buttons
                }
                try {
                    inputs[idx + 1].select();
                }
                catch (err) {

                }
                return false;
            }
        });
        return this;
    };
})(jQuery);

$("#form").enterAsTab({ 'allowSubmit': true});
</script>

Uwaga: nie zapomnij zastąpić .live() Metody jquery .on() Jeśli używasz nowszej wersji jquery niż 1.9.

 5
Author: vinesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:24

To jest problem z Chromium, jeśli chcesz go obejrzeć: https://bugs.chromium.org/p/chromium/issues/detail?id=410785

Jeśli nie chcesz, aby Twoje dane były wyświetlane na Twoim komputerze, kliknij przycisk "enter", a następnie "tabs" w polu hasła (i nie wysyłaj formularza):]}

Http://jsbin.com/zakeza/1/quiet

<form action="?">
  User <input type=text onkeypress=key(event)><br><br>
  Password <input id=pw type=password><br><br>
  <input type=submit>
</form>

<script>
  function key(event) {
    if (event.charCode == 13 && /Android/.test(navigator.userAgent)) {
      event.preventDefault();
      document.getElementById('pw').focus();
    }
  }
</script>

Edit: Uwaga Windows Phone również umieszcza Android W UA, więc wymaga testów, które działają na Windows Phone (i Android Firefox).

 5
Author: robocat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-25 06:22:58

Nie możemy zapobiec temu domyślnemu zachowaniu, ponieważ nie ma znacznika input type="next" dostępnego w HTML. Tak więc domyślnie pojawia się przycisk "Go". Poniżej link zawierający listę dostępnych tagów typu input: http://www.w3schools.com/tags/att_input_type.asp

 0
Author: VicJordan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 03:02:45

Aby uniknąć nieporozumień dla użytkownika puścić przycisk jako przycisk enter tylko.

W tym celu użyj znacznika formularza, ale aby uniknąć niekompletnych zgłoszeń, użyj wyłączonego atrybutu na przycisku Wyślij.

$("input:not(.submit)").bind('input',function(){
var isValid = validateInputs();

if(isValid)
                {
                    $('.submit').removeAttr('disabled');
                }
                else
                {
                    $('.submit').attr('disabled','disabled');
                }

});

Teraz, aby uniknąć przeładowania strony, nie używaj atrybutów action lub onsubmit w znaczniku formularza, zamiast tego użyj

$('#formid').submit(function(){

var disabled=$('.submit').attr('disabled');
                if(disabled=='disabled')
                {
                    return;
                }

callOnSubmitFunction();
return false;
}
);

Return false jest tutaj ważne, aby uniknąć przeładowania strony.

Z wyjątkiem chrome, firefox i domyślne przeglądarki android wyświetlają przyciski prev i next, które będą pracuj jako przyciski tabulacji, więc użyj odpowiedniego tabindex atrybuty na elemencie wejściowym formularza.

 0
Author: Shishir Arora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 00:24:58