2

У меня есть приложение для планшета html. Некоторые страницы <input> и <textarea> вместе со многими другими элементами: ссылки, меню, тексты, ...Windows 10 Tablet Browser: soft keyboard very buggy

  • Если я не нажать любую <input> или <textarea> все работает нормально
  • Как только я нажимаю один вход элемент, появляется мягкая клавиатура (как и ожидалось).
  • После ввода текст и скрытия клавиатуры, клавиатура всплывает снова каждый раз, когда я нажимаю на любом веб-приложение (даже в не форматируемых элементов)

Это полностью разрушает опыт, как вы вынуждены для использования веб-приложения с постоянно отображаемой клавиатурой.

Я пробовал много разных подходов к управлению фокусом ввода без каких-либо успехов, например, для вызова blur(), focus() и связанных с ним методов на сфокусированном компоненте, контейнерах, окнах ... но кажется ничего, кроме перезагрузки страницы, сбрасывает состояние клавиатуры на спрячьтесь еще раз, пока не будет задействован фокусируемый элемент.

Мои эксперименты:

  • Проверил, что нажатие вне <INPUT>/<TEXTAREA> вызывает фокус должен быть удален: onblur() вызывается, и document.activeElement возвращает NULL.

  • Также пытался вручную установить blur() все в документе после запуска onchange: $("input,textarea").blur().

  • Пробовал вручную давая focus() к неинтерактивному элементу с TabIndex (Hacky):

    <div id="dummyfocus" tabindex="0"> 
    $("#dummyfocus").focus() 
    
  • я проверил, что фиктивный элемент фактически получает фокус, input/textarea unfocuses, но даже в в этом случае проблема сохраняется.

В Android или IOS все работает, как ожидалось: Клавиатура будет автоматически не показывать, если нет <input> или <textarea> сфокусирован.

Любые советы? Любые фанки, написанные на основе microsoft-css-тегов, о которых я не слышал? :)

ответ

1

У меня есть аналогичная проблема, после некоторого рытья выясните, что проблема воспроизводится в браузере Microsoft Edge (используется в win10 uap как движок рендеринга). При нажатии на любой активный элемент становится Элемент body и по какой-либо причине (возможно, ошибка) клавиатура активируется, поэтому я добавил tabindex = 0 в контейнер div, который вложен в тело, поэтому, когда вы щелкнули вне любого объекта, способного сфокусироваться, становится активированным элементом, а всплывающее окно клавиатуры не запускается. для проверки какого элемента активируется я использовал этот код

document.body.addEventListener('click', function() { 
    console.log(document.activeElement); 
    }); 

Надежда это помогает.

+0

Спасибо за подсказку. Я также нашел этот способ обхода, но, к сожалению, не решает проблему (вам нужно добавить 'tabindex = x' для каждого элемента в DOM), и даже в этом случае много раз всплывающая клавиатура исчезает, когда вы щелкните элемент tabindexed. Насколько я исследовал эту проблему, я все больше убеждаюсь, что это (очень раздражающая) ошибка :( – rupps

1

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

$("body").click(function() { 
 
    $("#radioDummy").focus(); 
 
}); 
 
$("#MyTextArea").click(function (e) { 
 
    e.stopPropagation(); 
 
});

+0

эй очень умный! В качестве переключателей клавиатура будет скрыта. Попробуй! – rupps