Kiedy wpisuję ostatnią cyfrę , pierwsza cyfra wchodzi do text-box
(znika), dodaje jedną dodatkową spację.
Po kliknięciu na zewnątrz text-box
wygląda dobrze, czego potrzebuję podczas pisania ostatniego znaku.
#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" >
Pomóż mi wydostać się z tych problemów. Dzięki
javascript
jquery
html
css
Jignesh Panchal
źródło
źródło
1
(pierwszy znak) gubi się na lewo od wejścia (przewijany z ukrytym przepełnieniem).input
kontrolek i przesuwanie kursora między nimi podczas wpisywania / usuwania postaci. W przeciwnym razie zawsze będziesz mieć problemy z wyrównaniem między przeglądarkami / rozmiarami czcionek / poziomami powiększenia itp.Odpowiedzi:
Dodaj miejsce na kolejny numer i przytnij dane wejściowe za pomocą
clip-path
Lub bez ścieżki przycinającej poprzez zmniejszenie rozmiaru tła:
źródło
Użyj tego kodu. ładnie działa
źródło
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” nie jest domyślnym, jest to podstawa do konwersji intSpróbuj dodać ten skrypt poniżej pola wejściowego:
To zmusza kursor wejściowy do początku wprowadzania po wprowadzeniu 6. znaku. Dodałem również rozmycie () do pola, aby przeskakiwanie kursora na początek nie wystawało.
Limit czasu jest również potrzebny. Bez tego wprowadzony znak zostanie wstawiony na początku. Więcej informacji na temat limitu czasu: Czy setTimeout jest dobrym rozwiązaniem do wykonywania funkcji asynchronicznych za pomocą javascript?
źródło
Możesz sobie z tym poradzić, dodając zdarzenie blur () z js onkeyup pola wprowadzania:
źródło
Zmień css poniżej (to zadziała)
do
źródło
Podoba mi się więc odpowiedź Temani Afifa na temat używania maski przycinającej. Pomyśl, że to świetnie. Chciałem zaproponować inne rozwiązanie (nieco mniej eleganckie). Użyłem również Firefoksa, aby przetestować ten problem, a kliknięcie poza obszarem tekstowym (utrata fokusu) nie powoduje ponownego pojawienia się pierwszej cyfry lub powrotu łańcucha do normalnego poziomu podczas wprowadzania tekstu.
Wydaje mi się, że problemem jest ustawiony przez Ciebie atrybut css odstępów między literami:
letter-spacing: 31px;
i fakt, że uważam, że dotyczyłoby to „migającego” karetki, którą ma większość przeglądarek. W przypadku Chrome wydaje się to usuwać, gdy traci ostrość, a Firefox zachowuje to nawet po utracie ostrości.Pierwszym rozwiązaniem było ręczne wywołanie funkcji blur (), aby utraciła ostrość na wejściu. Działa to w Chrome (przy użyciu samodzielnie wykonującej się funkcji anonimowej):
lub nawet jako funkcję zdefiniowaną wywoływaną przez wejście numer_tekst w taki sposób:
Zauważysz niewielkie opóźnienie w przeglądarce Chrome, ale wywołanie tego w przeglądarce Firefox nie rozwiąże problemu.
Możemy zasadniczo wymusić to samo zachowanie w przeglądarce Firefox. Po krótkiej zabawie doszedłem do wniosku, że Chrome odświeża / przelicza odstępy między literami na rozmyciu. Moja sesja odtwarzania pokazała, że możesz zmusić Firefoksa do ponownego obliczenia tej wartości programowo:
W kodzie wygląda to następująco: funkcja JavaScript:
Będzie miał takie samo migotanie w przeglądarce Firefox jak w przypadku Chrome i wszystko będzie dobrze.
Uwaga : Funkcje limitu czasu mają dać przeglądarce czas na odświeżenie i faktycznie zaktualizować to, czego potrzebujemy.
Uwaga : Możesz wybrać wywołanie funkcji .blur () w funkcji, aby pole tekstowe straciło fokus, lub pominąć to i nadal będą znajdować się w polu wprowadzania bez błędu z cyframi.
Mam nadzieję, że pomoże to w zrozumieniu pojęć, a także w rozwiązaniu problemu. Niektóre inne osoby dały dobre rozwiązania, które unikają migotania i działają zarówno w przeglądarce Firefox, jak i Chrome!
źródło
Wygląda jak typowy problem z interfejsem użytkownika, z którym się wcześniej spotkałem.
Założę się, że zawiesza się tylko na niektórych platformach (taka jest natura tego konkretnego błędu).
Na niektórych, ale nie wszystkich platformach, znak odstępu służy do wskazania kursora.
Na niektórych, ale nie na wszystkich platformach, postać ta nie ma odstępów, ale nakłada się na następną, nie ostatnią postać. Dlatego jeśli nie będzie następnego znaku, miejsce zostanie wypełnione do momentu wprowadzenia danych.
W obu tych przypadkach wyświetlacz będzie działał w ten sposób.
Jest to przypadek, w którym najlepszym rozwiązaniem jest najprostsze rozwiązanie, dostosowane do tego typowego dziwactwa systemowego, a nie rozwiązanie, które zmusza go do zachowania się tak, jak chcesz, jak sugerują niektórzy ludzie. Jest mniej prawdopodobne, że wprowadzi błędy, a bardziej prawdopodobne, że zadziała na wszystkich platformach.
Rozwiązaniem jest trochę wolnego miejsca na końcu wpisu na wyświetlenie tego.
Zwiększ „ szerokość ” do 230 lub 240 i powinieneś być dobry.
Ponadto można jeszcze lepiej dostosować niestandardowe systemy, zwłaszcza systemy ułatwień dostępu z alternatywnymi czcionkami lub atrybutami rozmiaru, po prostu wykrywając szerokość, wprowadzając spacje o pełnej szerokości w obszarze, dodając na końcu przestrzeń o szerokości jednej czwartej, mierząc je, a następnie usuwając lub po prostu zmusza go do zastąpienia spacji o pełnej szerokości, gdy użytkownik pisze (lub w inny sposób wprowadza dane, nie zakładaj, że jest to klawiatura lub nawet coś, co wprowadza jeden znak na raz).
źródło
źródło