Hej, pomoże ktoś z kodem jeśli zmienimy input z type="string" na type="number" wtedy kod nie działa walidacja nie wykonuje się

- Rejestracja:ponad 18 lat
- Ostatnio:4 dni
- Lokalizacja:Rzeszów
Będzie ciężko, ponieważ wpisanie w input type number "35e" powoduje, że w teorii jest to prawdopodobnie w przyszłości poprawna wartość np. "35e1" (notacja wykładnicza) - ale w tej chwili jeszcze nie jest. Więc odczytując bieżącą wartość przez input.val()
dostajesz "" (pusty string). Pusty string wg Twojego kodu będzie poprawną wartością, w końcu wyczyścić ktoś pole też mógłby chcieć przy pisaniu, więc to ma sens.
Nie wiem czy jest jakaś możliwość odczytania takiej wartości w trakcie pisania.
Input type number odsiewa większość niepoprawnych rzeczy, więc bardzo bym się nie przejmował notacją wykładniczą i miejscami po przecinku. Popraw wartość, utnij miejsca po przecinku na evencie blur
, gdy użytkownik "wyjdzie" z pola.
- Rejestracja:około 2 lata
- Ostatnio:5 dni
- Lokalizacja:Holandia
- Postów:843
Hm.
<!DOCTYPE html>
<html>
<body>
<h1>HTML DOM Events</h1>
<h2>The onkeypress Event</h2>
<p>A function is triggered when the user is pressing a key in the input field.</p>
<input id="numeric_input_id" type="text" onkeyup="myFunction(event)">
<script>
tekst=[];
position=0;
function myFunction(event) {
tmp_tekst="";
tmp = event.key;
if(tmp.charCodeAt(0)>=48 && tmp.charCodeAt(0)<=58){tekst[position]=tmp;position++;}
document.getElementById("numeric_input_id").value="";
for(let u=0;u<position;u++){tmp_tekst+=tekst[u];};
document.getElementById("numeric_input_id").value=tmp_tekst;
}
</script>
</body>
</html>
- Rejestracja:około 2 lata
- Ostatnio:5 dni
- Lokalizacja:Holandia
- Postów:843
"Hej, pomoże ktoś z kodem jeśli zmienimy input z type="string" na type="number" wtedy kod nie działa walidacja nie wykonuje się" - teraz type jest string, walidacja się wykonuje. Co jest nie tak?
- Rejestracja:około 2 lata
- Ostatnio:5 dni
- Lokalizacja:Holandia
- Postów:843
A to zabawne, że o tym rozmawiamy, bo 2 godziny temu robiłem inputa na numer i przeszkadzały mi strzałki. Dałem nieedytowalnego diva i 2 przyciski z prawej strony + i -. Nie ma lepszej walidacji chyba.

- Rejestracja:prawie 2 lata
- Ostatnio:prawie 2 lata
- Postów:43
Dobrze można pattern = RegExp('^\\d+$')
potem pattern.exec('2345')
, nigdy nie spotkałem się z przypadkiem gdzie usuwa się input użytkownika jeśli jest niepoprawny, można też zasygnalizować czerwonym border colorem. Sam html też posiada wewnętrzne mechanizmy validacji, rzadko z tego korzystam, ale wiem, że można samym tagiem wymusić taką rzecz. Tag HTML3.

- Rejestracja:ponad 18 lat
- Ostatnio:4 dni
- Lokalizacja:Rzeszów
Ale jak masz nie pozwolić na znak "e", kiedy po wpisaniu "1e" nie możesz odczytać zawartości jako "1e", więc nie ma jak tego zabronić? Możesz co prawda zabronić "e" w ogóle na "keydown", bez odczytywania zawartości inputa, ale "e" można przemycić też poprzez wklejenie. I znowu dochodzisz do momentu, gdzie w inpucie masz "1e", ale nie możesz tego odrzucić, bo wartość pobrana z inputa wyniesie ""
(pusty string).

- Rejestracja:prawie 2 lata
- Ostatnio:prawie 2 lata
- Postów:43
Nie wiem o czym teraz jest problem, przecież te notacje łatwo zrobić jeśli tylko jest type="string"
, a nie type="number"
.
<input type="text">
document.querySelector("input").value = "1e1"
let value = Number(document.querySelector("input").value)
I notacja naukowa działa

- Rejestracja:ponad 18 lat
- Ostatnio:4 dni
- Lokalizacja:Rzeszów
Ale cała podstawa problemu jest taka, że chcemy type=number
Czemu zniżamy się do poziomu jakiejś elektrody? Nie ma nic niepoprawnego w type=number, wręcz przeciwnie - jest wiele zalet (klawiatura ekranowa domyślnie w trybie liczb, możliwość ustawienia step
, kontrolki do przełączania i obsługa scrolla, dodatkowa informacja do dostępności (a11y)), więc jeżeli takie są założenia to ich nie zmieniajmy.
No i ja twierdzę, że nie da się tego osiągnąć co chce OP, jak ktoś twierdzi, że się da to prosimy o udowodnienie. A przykłady z type=text (nie string btw) to sam OP ma działające.


