Когда я набираю последнее число , первое число входит внутрь text-box
(оно исчезает), оно добавляет один дополнительный пробел.
После того, как я нажму снаружи, text-box
это выглядит хорошо, что мне нужно во время ввода последнего символа.
#number_text {
padding-left: 9px;
letter-spacing: 31px;
border: 0;
background-image: linear-gradient(to right, #e1e1e1 70%, rgba(255, 255, 255, 0) 0%);
background-position: left bottom;
background-size: 38px 1px;
background-repeat: repeat-x;
width: 220px;
box-sizing: border-box;
outline:none;
}
<input type="text" id="number_text" maxlength="6" pattern="\d{6}" value="1234" >
Помоги мне выбраться из этой проблемы. Спасибо
javascript
jquery
html
css
Джинеш Панчал
источник
источник
1
(первый символ) теряется слева от ввода (прокручивается со скрытым переполнением).input
элементов управления и перемещать курсор между ними по мере того, как персонаж вводится / удаляется. В противном случае у вас всегда будут проблемы с выравниванием между браузерами / размерами шрифтов / уровнями масштабирования и т. Д.Ответы:
Добавить пробел для другого номера и обрезать ввод, используя
clip-path
Или без клипа путем уменьшения размера фона:
источник
Используйте этот код. это приятно работать
источник
else if (myLength <= maxLength) { prev=target.previousElementSibling; while (prev = prev) { if (prev == null) break; if (prev.tagName.toLowerCase() == "input") { prev.focus(); break; } } }
parseInt(target.attributes["maxlength"].value, 6);
«6» не является значением по умолчанию, это основа для преобразования intПопробуйте добавить этот скрипт ниже поля ввода:
Этот вводит курсор ввода в начало ввода после ввода 6-го символа. Я также добавил размытие () в поле, чтобы переход курсора к началу не выпирал.
Таймаут также необходим. Без этого введенный символ будет вставлен в начале. Подробнее о тайм-ауте: Является ли setTimeout хорошим решением для выполнения асинхронных функций с помощью JavaScript?
источник
Вы можете справиться с этим, добавив событие blur () js onkeyup поля ввода:
источник
Пожалуйста, измените на CSS ниже (это будет работать)
в
источник
Поэтому мне нравится ответ Темани Афифа об использовании обтравочной маски. Думаю, это здорово. Я хотел предложить другое решение (немного менее элегантное). Я также использовал Firefox для проверки этой проблемы, и нажатие за пределами текстовой области (потеря фокуса) не приводит к повторному появлению 1-й цифры или возвращению строки в нормальное состояние при вводе текста.
Я полагаю, что проблема заключается в заданном вами атрибуте css буквы
letter-spacing: 31px;
и том факте, что я считаю, что это применимо к "мигающей" каретке, которую имеет большинство браузеров. Используя Chrome, он, кажется, удаляет это, когда теряет фокус, в то время как Firefox сохраняет это даже после потери фокуса.Первым решением было использовать вручную вызов функции blur (), чтобы ввод потерял фокус. Это работает в Chrome (с использованием самоисполняющейся анонимной функции):
или даже как Определенная функция, вызываемая вводом number_text следующим образом:
Вы заметите небольшую задержку в Chrome, но вызов этого в Firefox не решит проблему.
По сути, мы можем форсировать такое же поведение в Firefox. Немного поиграв, я понял, что Chrome обновляет / пересчитывает интервал между буквами в размытии. Мой игровой сеанс показал, что вы можете заставить Firefox пересчитать это значение программно:
В коде это будет выглядеть как следующая функция JavaScript:
В Firefox будет то же самое мерцание, что и в Chrome, и все будет хорошо.
Примечание . Функции тайм-аута дают браузеру время на обновление и обновление того, что нам нужно.
Примечание : Вы можете вызвать .blur () в функции, чтобы текстовое поле потеряло фокус, или пропустите это, и они все равно будут в поле ввода без ошибки с цифрами.
Надеюсь, что это поможет вашему концептуальному пониманию, а также решению проблемы. Некоторые другие люди дали хорошие решения, которые избегают всего мерцания, и работают как в Firefox, так и в Chrome!
источник
Это похоже на общую проблему пользовательского интерфейса, с которой я сталкивался раньше.
Могу поспорить, что это не работает только на некоторых платформах (это характер этой конкретной ошибки.)
На некоторых, но не на всех платформах, для обозначения каретки используется пробел.
На некоторых, но не на всех платформах этот символ не является пробелом, а накладывается на следующий, а не последний символ. Следовательно, если следующего символа не будет, пробел будет заполнен до тех пор, пока ввод не будет выполнен.
В обоих этих случаях дисплей будет действовать таким образом.
Это тот случай, когда лучшим решением является простейшее решение, учитывающее эту распространенную причуду системы, а не решение, которое заставляет ее вести себя так, как вы этого хотите, как предлагали некоторые люди. Это с меньшей вероятностью приводит к появлению ошибок и с большей вероятностью работает на всех платформах.
Решение состоит в том, чтобы дать немного свободного места в конце записи для отображения этого.
Увеличьте « ширину » до 230 или 240, и все будет хорошо.
Кроме того, вы могли бы даже лучше приспособить нестандартные системы, особенно системы доступности с альтернативными шрифтами или атрибутами размера, просто определив ширину, введя в область полные ширины, добавив в конце пространство шириной в четверть, измерив их, затем удалив их, или просто сфальсифицировать его, чтобы перезаписать пробелы на всю ширину при вводе пользователем (или иным образом вводить данные, не предполагайте, что это клавиатура или даже что-то, что вводит по одному символу за раз).
источник
источник