HTML: почему браузер Android показывает "Go" вместо "Next" на клавиатуре?



у меня есть форма входа в HTML, которая содержит следующие элементы (в этом порядке):





  • input type=text (имя пользователя)


  • input type=password (пароль)


  • input type=submit кнопку (логин)


почему браузер Android показывает кнопку " Go "на мягкой клавиатуре вместо кнопки" Next", когда фокус находится в text input? Это приводит к тому, что пользователь не может войти в систему очень легко, потому что после ввода имени пользователя пользователь нажимает нижнюю правую кнопку клавиатура (обычно правильное действие) и форма будут представлены с пустым паролем, который, очевидно, не будет работать. [Такое поведение имело бы смысл, если бы мой браузер был настроен на запоминание паролей, и менеджер паролей мог бы заполнить пароль. Однако здесь это не так, как вы можете проверить себя ниже.]



Я хотел бы иметь текст типа ввода, чтобы иметь кнопку "Далее" и пароль типа ввода (последний ввод перед отправкой), чтобы иметь "Кнопка go.



пример проблемной формы находится в https://peda.net/:login (Эта форма содержит код для определения ключа "Enter" для ввода и предотвращает отправку формы, если последний видимый вход формы не сфокусирован).



знаете ли вы реальное решение этой проблемы? Я знаю, что если бы я реализовывал собственное приложение, я бы использовал android:imeOptions="actionNext" (см. Как изменить клавиатуру программной клавиши Android" Go " на "Next"). Однако в этом случае это HTML-форма и Браузер по умолчанию в Android.



проблема видна, по крайней мере, в следующих конфигурациях:




  • "браузер" системное приложение работает на Android 2.3.4 (Cyanogenmod 7)

  • системное приложение"браузер" работает на Android 4.2.2 (Cyanogenmod 10.1)

  • "браузер" системное приложение работает на Android 4.3.1 (Cyanogenmod 10.2 M1)

  • системное приложение"браузер" (AOSP Browser) работает на Android 4.4.2 (Cyanogenmod 11.0 M3)

  • "браузер" приложение системы (AOSP Browser) работает на Android 5.5.1 (Cyanogenmod 12.1) [имеет значок стрелки вместо слова "Go"]

  • системное приложение"браузер" (браузер AOSP) работает на Android 6.0.1 (Cyanogenmod 13.0) [имеет значок стрелки вместо слова "Go"]

587   6  

6 ответов:

браузер Android всегда отображает Go для полей ввода, потому что некоторые формы в интернете (особенно поля поиска) не имеют кнопки отправки и могут быть активированы только нажатием Enter (Go эквивалентен Enter).

вместо этого некоторые версии Android будут показывать клавишу tab в правом нижнем углу клавиатуры для облегчения навигации между полями формы.

Я не думаю, что вы можете допустить любое из этих поведений.

двумя возможными обходные пути:

  1. используйте JavaScript, чтобы игнорировать отправку формы входа, пока оба входа не будут пустыми:

    <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. самым чистым решением было бы установить оба входа, которые будут необходимы, используя новый HTML5 обязательный атрибут -но браузер Android пока не поддерживает это. Однако хорошим подходом было бы дополнить требуемый атрибут резервным вариантом JavaScript, например описано CSSKarma.

чтобы добавить к ответу Джона, Android всегда добавляет " Go " к текстовым вводам и всегда добавляет 'Next' к числовым входам. Я хотел бы услышать, как человек, ответственный за этот выбор, объясняет свою логику.

дизайн softkeyboard просто паршивый в этом отношении, потому что каждый пользователь, с которым я тестировал до сих пор, думал, что большая синяя кнопка на клавиатуре должна быть кнопкой, которая приведет вас к следующему полю формы, а затем в последнем поле формы позволит вам отправить форма.

iOS это еще хуже в этом отношении, так как они предлагают кнопку " Go " с каждым полем формы и без возможности вкладки через поля. Приятно, что Apple любит делать компьютеры простыми для людей, но иногда предполагая, что люди, как это просто может затенить в предположении, что люди все идиоты.

извините за эту тираду. У меня есть что-то конструктивное предложить:

Если ваше последнее поле формы оказывается type=number, то есть крошечный хак, который будет работать на Android, а также iOS: добавьте невидимый текстовый ввод в форму с onfocus= " $('#thisForm').представлять.";)( В Android это поле будет кратко мигать в поле зрения: в iOS это не будет. Чтобы сделать ситуацию Android более приемлемой, вы можете либо установить значение для ввода текста, например "закрытие этой формы", либо установить его ширину в 0, что приведет к тому, что поле формы будет не совсем 0 шириной, но все же очень маленьким.

ужасный хак, но эй, вините в этом людей пользовательского интерфейса в Google и Яблоко.

посмотреть заменить кнопку Go на мягкой клавиатуре с Next в Phonegap.

для быстрой навигации смотрите это plunker. Чтобы следовать полному коду

<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>

примечание: не забудьте заменить .live() метод jquery с .on() при использовании более новой версии jquery, чем 1.9.

это проблема хрома, если вы хотите посмотреть его:https://bugs.chromium.org/p/chromium/issues/detail?id=410785

вот обходной путь для Android, который изменяет "enter" в пользовательском вводе, чтобы он "вкладывал" в поле пароля (и не отправлял форму):

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: Примечание Windows Phone также ставит Android в UA, поэтому необходимо тестирование, которое работает на Windows Phone (и Android Firefox).

мы не можем предотвратить это поведение по умолчанию, потому что нет ввода type="next" тег доступен в HTML на данный момент. Поэтому по умолчанию появляется кнопка "Go". Ниже ссылка, имеющая список доступных тегов типа ввода:http://www.w3schools.com/tags/att_input_type.asp

чтобы избежать путаницы для пользователя отпустите функцию кнопки, как только кнопка ввода.

для этого используйте тег формы, но во избежание неполных представлений используйте отключенный атрибут на кнопке отправки.

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

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

});

теперь, чтобы избежать перезагрузки страницы, не используйте атрибуты action или onsubmit в теге формы, вместо этого используйте

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

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

callOnSubmitFunction();
return false;
}
);

return false важно здесь, чтобы избежать перезагрузки страницы.

за исключением chrome, firefox и браузеры android по умолчанию показывают кнопки prev и next, которые будут работать как кнопки табуляции, поэтому используйте правильные атрибуты tabindex на элементе ввода формы.

Comments

    Ничего не найдено.