Aztán eltelé pár év, eljőve 2014 és publikálóda az HTML5 2014 edisön, benne az, hogy a number
- és jópár egyéb - típusú mezőkön a selectionStart
és a selectionEnd
ne legyen használható, mert csak, mert ezt főzték ki a marha okosok az büdös internyetes "szabvány""hivatalban". Igaz, hogy több mint egy fél évtizede tökéletesen működik, de ez így akkor sem jó és punktum. Indoklás nincs, csak az, hogy "do not apply".
És az nagy brózergyártók ugornak vala és implementálák izibe ezt a kozmikus méretű baromságot és sok-sok webkóder hirtelen beszopá az nagy digitális faszt, mert bedöglék az kódja vala. Megreklamálák eztet vala az nagy brózergyártóknál (pl. Chrome #1, Chrome #2, Firefox #1, Firefox #2), de csak kapák az egy darab egyujjas nemzetközi jelzést, hogy ez pedig innentől nem támogatott, mert csak és kész; indoklás - hogy mitől jobb ez így, miért kell ezt így, ha eddig működött - doszta nincs. Kuss vagyon köcsög júzerek.
Engem eddig megkímélt a sors attól, hogy ezzel kelljen szívnom, hogy number
típusú mezőkben kijelöléssel kelljen bíbelődnöm, de most ez a perc is elérkezett. A keresgetés nem sok eredményt hozott, mindenütt azt javasolják, hogy használj text
típusút és írd meg hozzá a jávaszkriptes gányolásaidat, mint a 2008 - és a HTML5 - előtti régi, de ebből a szempontból nem annyira szép időkben. Csudálatos mire képes manapság ez a fejlett technika.
Aztán beleakadtam egy olyan tippbe, hogy át kell állítani a mező típusát text
-re, lekérni, majd visszaállítani. Ezt kipróbáltam, de sajnos az átállítás után annyi volt a különbség, hogy a selectionStart
és selectionEnd
már nem null
volt, hanem nulla, függetlenül a kurzor pozíciójától és a kijelöléstől. Aztán kattant valami az agyamnak hívott szartenger mélyén és kipróbáltam, hogy mi történik, ha megvárom, hogy "beálljon" a mező. Nullás várakoztatási idővel meghívott setTimeout
-ba raktam a type
lecserélése utáni részt és hirtelen meggyógyult, működni kezdett én meg örülni kezdtem, hogy sikerült kicselezni ezt a baromságot.
Hittem én nagy naívan, ugyanis a túloldalt üldögélő haver szólt, hogy neki viszont nem megy. A nálam lévő Ungoogled Chromium 73-assal ez a snippet még tökéletesen működik, de a nála lévő kilencvenvalahanyas Chrome-ban a type
lecserélése a kurzornak a nulladik pozícióba ugrását eredményezi, holott ezt senki nem kérte és a v73-ban még nem is csinálta. (Firefoxban (PaleMoon-ban/IceWeasel-ben) ugyanez történik, de ott a jelek szerint ez már régebben is így volt, hogy a típus lecserélése elugrasztja a kurzort.)
A szomorú az egészben, hogy igazából tényleg nem lehet megindokolni semmivel, mert leimplementálhatatlanságról nem beszélhetünk, ha korábban már működött és a működés fizikai megszűnéséről sem beszélhetünk, hiszen a kurzor és a kijelölés, valamint a copy/paste továbbra is megy ezeken a mezőkön, sőt átkapcsolva text
-re továbbra is lekérdezhető, tehát a mechanizmus a motorban nem szűnt meg. Csak letiltották a hozzáférést. És ennek se értelme, se haszna.
Így csak egy dolgot értek el: még több jávaszkriptet, mert nem elég, hogy vissza kell térni a régi text
típusú input
-tal való taknyoláshoz, de mindezt úgy, hogy a webes fejlesztői kultúra viszont már nem a régi, így azt, amit 15 éve pár kB-nyi natúr JS kódból megoldottak, ahhoz ma betöltenek több MB-nyi JS framework-öt...
És mindezt úgy, hogy a HTML5 nem szabvány, hanem ajánlás, tehát a kutya nem kötelezte őket erre. Júzerszopatás as a Service. Na, ebből is csak a hardwaregyárak profitálnak, hogy a webet beborítja a szutyokszkript bloated szennye.
- TCH blogja
- A hozzászóláshoz be kell jelentkezni
- 319 megtekintés
Hozzászólások
Nem olyan nehéz number stílusú, integeres input mezőt csinálni, kb ennyi:
<form>
<input type="text" pattern="\d+" maxlength="10" inputmode="numeric"
oninput="this.value|=0; if(this.value==0){this.value = null}"
/>
<input type="submit" />
</form>
No rainbow, no sugar
- A hozzászóláshoz be kell jelentkezni
Senki nem mondta, hogy nehéz, mi is megcsináltuk a magunkét. A lényeg az volt, hogy megint taknyolni kell hozzá, amit a mai JS fejlesztők nem pár kB-ból fognak megoldani.
Ami ezt illeti:
- Nem enged standalone nullát beírni.
- Nem numerikus karakter leütése esetén az egész mezőt törli.
- Nincsenek kis inkrementor/dekrementor gombjai.
- A kurzorokkal sem lehet ugyanazt a funkciót elérni.
- A maxlength
nem helyettesíti a max
mezőt, a min
-t meg pláne nem.
- A hozzászóláshoz be kell jelentkezni
> A maxlength
nem helyettesíti a max
mezőt, a min
-t meg pláne nem.
Ha tudnál kódot értelmezni akkor tudnád, hogy a fenti kódban a maxlength nem a max mezőt helyettesíti, - de ez igaz a többi hasfájásra is.
No rainbow, no sugar
- A hozzászóláshoz be kell jelentkezni
Ha tudnál szöveget értelmezni, akkor tudnád, hogy a meg nem valósított igények voltak felsorolva. Ami meg a többi hasfájást illeti, a standalone nulla be nem írhatósága az azért nem a hasfájás kategória; miféle számmező az, miféle integer az, aminek az értéke nem lehet nulla? A többire még rá lehet fogni, hogy "speciális" igény, de erre nem, így használhatatlan az egész.
- A hozzászóláshoz be kell jelentkezni
> miféle integer az, aminek az értéke nem lehet nulla?
Nem tudom pl. rendelésnél nincs értelme a 0 termék beírásnak.
No rainbow, no sugar
- A hozzászóláshoz be kell jelentkezni
Ez most komoly? Megmagyarázzuk, hogy miért nincs szükségünk a nullára, mint értékre? Azt is egy darab arbitrális példával?
- A hozzászóláshoz be kell jelentkezni
nekem semmit nem kell magyarázni, ha kell a 0, kiveszed az if feltétel részt és lesz nullád, de mint tudjuk jól tudsz értelmezni kódot
No rainbow, no sugar
- A hozzászóláshoz be kell jelentkezni
Tehát közlöd nagy fölényesen, hogy "nem olyan nehéz number stílusú, integeres input mezőt csinálni", aztán mutatsz egy tökéletesen használhatatlan megoldást, majd a teljesen jogos kritikákra az a válasz, hogy a hiányzó dolgok nem is kellenek, meg, hogy a másik nem tud kódot értelmezni? Honnan tudod, hogy nem tud? Csak mert nem javította ki magának, ami a problémát okozta, egy olyan kódban, ami kb. zérót fedett le az igényeiből, sőt még broken is? Inkább az a kérdés, hogy te minek tetted bele, nem az, hogy én miért nem szedtem ki belőle... Egyébként csak mondom, hogy ha nullával maszkolsz, akkor automatice jelölt 32-bitbe kényszeríted az egészet és bármilyen 2147483647-nél nagyobb számot beírsz, át fog fordulni negatívba; ez is egy csinos kis bug. Na, ki nem tud kódot értelmezni? Nem én nem tudok kódot értelmezni, hanem te nem tudsz kódot írni. Szerintem szállj egy kicsit magadba, mert semmi okod nincs a személyeskedésre.
- A hozzászóláshoz be kell jelentkezni
Azért ez baromság. A 0 nem véletlenül létezik.
- A hozzászóláshoz be kell jelentkezni
Hogyne lenne: ha nullára írod át a kosárban a darabszámát valaminek, az kikerül a kosárból :)
Én még olyan webshopot is tudok, ahol a negatív számok is értelmezhető mennyiségek megrendeléskor, bár ez imho inkább a papíros megrendeléssel kialakult workflow digitalizálása miatt maradhatott benne.
- A hozzászóláshoz be kell jelentkezni
Ezt én is akartam írni, de arra úgyis az lett volna a válasz, hogy arra lehet kirakni törlés gombot. :)
- A hozzászóláshoz be kell jelentkezni
- Kellett a Flash-t kivégeztetnetek. Egyétek meg, amit főztetek.
- A Firefox mióta tényező így 2021-ben?
- A hozzászóláshoz be kell jelentkezni
1. Ööö...mi ez a második személy? Én elleneztem a Flash kinyírását és ezt sose rejtettem véka alá, ahogy azt sem, hogy mennyire gyűlölöm a dzsuvaszkriptet. Szerintem keversz valakivel.
2. Desktopon még az, ott még 7-8%-a van. Összességében már nyilván nem az, kevesebb mint 4%, kevesebb mint Edge user...
- A hozzászóláshoz be kell jelentkezni
Kicsit XY probléma érzésem van. Mi az a probléma, amit meg akarsz oldani? Mihez kell neked a selectiont elérned egy numerikus mezőben? Lehet, hogy ha leírnád, hogy mit szeretnél megoldani, tudnánk együtt gondolkodni. De így csak a rantet lehet olvasni, ez nem vezet sehova.
- A hozzászóláshoz be kell jelentkezni
A probléma már megoldódott, a kurzorpozíció/selection meg arra kellett volna a numerikus mezőben, hogy oda/a helyére tudjak JS-ből beszúrni bármit (nem a vágólapot), de a mi konkrét feladatunk abszolúte mellékes volt annak a kapcsán, amit le akartam írni: hogy egy működő - és a júzerek által nagyon is használt - feature-t mindennemű indoklás nélkül letiltottak, anélkül, hogy bármilyen műszaki, vagy akár gazdasági oka lett volna, lévén már működött, nem kellett volna megcsinálni.
- A hozzászóláshoz be kell jelentkezni
Azaz van egy numerikus adatot tartalmazó szövegmeződ, amiben van kijelölés/kurzor, és a kurzor helyén számokat akarsz még beírni, illetve a kijelölést felülvágni, más számmal?
Jól értem?
Miért fontos az, hogy ez numerikus mező legyen? Azért, hogy tudj megadni minimum/maximum értéket? Nem elég neked a text típusú input, numeric ill. decimal inputmode-dal?
Ezek ténylegesen számok, vagy számjegyeket tartalmazó stringek? Pl. az adószám nem egy szám, az irányítószám nem egy szám, a telefonszám nem egy szám, csak számjegeket tartalmazó stringek.
Módosítani pedig azért kellett ezt, mert a user agentekre van bízva, hogy hogyan jelenítik meg a dolgot, pl. egy min=1, max=5 step=1 inputmezőt meg lehet választólistával is jeleníteni, ott nem lesz kiválasztás meg kurzorpozíció.
- A hozzászóláshoz be kell jelentkezni
Azaz van egy numerikus adatot tartalmazó szövegmeződ, amiben van kijelölés/kurzor, és a kurzor helyén számokat akarsz még beírni, illetve a kijelölést felülvágni, más számmal?
Jól értem?
Nem kimerítően, de mint mondtam, mellékes, hogy nekünk mi kellett. Nem ez volt a lényeg.
Miért fontos az, hogy ez numerikus mező legyen? Azért, hogy tudj megadni minimum/maximum értéket? Nem elég neked a text típusú input, numeric ill. decimal inputmode-dal?
Pedig leírtam, hogy ott van a kis léptető is, többek között...
Ezek ténylegesen számok, vagy számjegyeket tartalmazó stringek?
Tekintve, hogy a DOM-ban minden value
mindenképpen string, így az utóbbi, de elméletben integer, azaz csak számok, ill. a mínuszjel az elején, ha van. De mint mondtam, ez mellékes, mert nem az volt a lényeg, hogy nekünk mi kellett éppen.
A lényeg az volt, hogy volt valami, aminek volt értelme, működött és használták is és ez csak simán le lett tiltva, cél és értelem nélkül.
Módosítani pedig azért kellett ezt, mert a user agentekre van bízva, hogy hogyan jelenítik meg a dolgot, pl. egy min=1, max=5 step=1 inputmezőt meg lehet választólistával is jeleníteni, ott nem lesz kiválasztás meg kurzorpozíció.
Ez most vicc? Fogunk egy nagyságrendekkel kevesebbszer előálló esetet, mint a normál használatot és ezért globálisan letiltjuk, ahelyett, hogy mondjuk valamelyik attribútumtól, vagy egyéb környezeti feltételtől tennénk függővé? Ez olyan, mintha azt mondanád, hogy a biciklire nem kell kerék, mert ha fejjel lefelé letesszük és pokrócot tartunk rajta, akkor a kerék csak útban van.
Csekkold már le azt a listát. Kiszedték a kijelölés/kurzor lekérdezhetőségét az email
típusú mezőnél is. Azt is meg lehet jeleníteni listaként, vagy mi?
- A hozzászóláshoz be kell jelentkezni
. (mobilon nagyon könnyű kétszer a bekuldesre kattintani)
- A hozzászóláshoz be kell jelentkezni