Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
Lze nějak jednoduše a účinně povolit v inputu type="text" pouze čísla, tzn.: 1234567890
Tzn. vůbec nedovolit napsat nějaké jiné znaky. jQuery datepicker to umí, a umožňuje psát pouze čísla a tečky, jak to tedy prosím můžu udělat na konkrétní vybrané znaky, např. čísla? |
||
weroro Profil |
#2 · Zasláno: 11. 10. 2013, 17:14:58
V novších prehliadačoch môžeš použiť
input type="number"
|
||
quatzael Profil |
#3 · Zasláno: 11. 10. 2013, 17:55:12 · Upravil/a: quatzael
weroro:
To je na nic. Tohle dovolí tam napsat co chci a když to není číslo a kliknu mimo input tak to celý smaže.. Já hledám řešení, kdy prostě Ti to nedovolí vůbec napsat nic i při fokusovaným inputu. Navíc když tam zadáš: "45gg" tak Ti to nechá, když tam dáš "gg45" tak to celý smaže.. Naprosto k ničemu. Není na to náhodou nějaký jQuery? |
||
anonymni Profil * |
#4 · Zasláno: 11. 10. 2013, 18:01:17
quatzael:
„Není na to náhodou nějaký jQuery?“ ne, stačí ti čistý JS. Událost onkeypress() a kontrola právě stisknuté klávesy.
|
||
Zechy Profil |
#5 · Zasláno: 11. 10. 2013, 18:04:22
quatzael:
jQuery UI Spinner, ale ten funguje úplně stejně jako type="number" |
||
quatzael Profil |
#6 · Zasláno: 11. 10. 2013, 18:10:23
anonymni:
No ale co s tím? To mám potom to nečíslo nějak mazat? $('#num-input').keypress(function(e){ if(e.which == neco){ //neco } }); |
||
weroro Profil |
function numbersFormater(n) { var a = n = n.split('\x20').join('').split('\xA0').join(''); n = ''; for (var j = 0; j < a.length; j++) { var cc = a.charCodeAt(j); if (cc >= 48 && cc <= 57) n += a.charAt(j); } return n; } document.getElementById('num-input').onkeyup = function (e) { this.value = numbersFormater(this.value); }; |
||
Chamurappi Profil |
#8 · Zasláno: 11. 10. 2013, 18:43:15
Reaguji na quatzaela:
<input onkeypress="return !isNaN(String.fromCharCode(event.charCode || event.keyCode))"> Vložení písmenek ze schránky tímhle skriptem zabránit nepůjde. K čemu zákaz nečíselných znaků potřebuješ? |
||
quatzael Profil |
#9 · Zasláno: 11. 10. 2013, 18:46:01 · Upravil/a: quatzael
weroro:
Dík moc za snahu, ale musím uznat, že to je opravdu moc škaredé.. Chamurappi: Tohle je lepší, ale povoluje to mezery. To by nešlo náhodou dát taky nějak pryč? Chamurappi: „K čemu zákaz nečíselných znaků potřebuješ?“ Když je input například pro to, aby uživatel zadal počet v celých čísel, tak je víc user-friendly když mu to prostě nedovolí tam psát něco co tam nepatří. |
||
anonymni Profil * |
#10 · Zasláno: 11. 10. 2013, 19:03:16
quatzael:
„Když je input například pro to, aby uživatel zadal počet v celých čísel, tak je víc user-friendly když mu to prostě nedovolí tam psát něco co tam nepatří.“ ... pokud se bude držet toho, co má zadávat, tak je to user-friendly až až... pokud chce zkoušet, co mu projde, nebraň mu v tom (stejně, pamatuj na vypnutý JS) |
||
Zechy Profil |
#11 · Zasláno: 11. 10. 2013, 19:32:38
quatzael, anonymni:
Tomu se spíš nadává blbuvzdornost než user-friendly. Klasický uživatel ví, že když chceš číslo, tak máš zadat číslo. |
||
Amunak Profil |
Něco podobného jsem dělal a mám několik poznatků:
1) tahat kvůli tomu jQuery je zbytečné 2) Kód, který naznačil Chamurappi, bude mít nežádoucí účinky 3) Těžko se dosahuje univerzální kompatibility mezi prohlížeči a stejně se některých věcí (jako je copy-paste) nedá moc zbavit 4) Spíš než vyloženě rušit keypress by mohlo v případě "jen čísla" být lepší po keypressu hledat v poli ne-čísla a odmazávat je Mám něco takového: (function() { $('input.js-sanitize-search-string').on('keypress', function(event) { var _event = event || window.event; var key = _event.keyCode || _event.which; // hack pro kontrolní klávesy if($.inArray(key, [13,8,9,16,17,18,19,20,27,33,34,35,36,37,38,39,40,45,46,91,92,93]) != -1) return true; key = String.fromCharCode(key); //povolené znaky var regex = /^[A-Za-z0-9 ěščřžýáĂéúůďťĹ�ĚŠČĹ�ŽÝĂ�ÍÉÚŮĎŤŇßäöüÄÖÜ]$/; if(!regex.test(key)) { _event.returnValue = false; if (_event.preventDefault) _event.preventDefault(); } }); })(); Věnujte pozornost hlavně tomu "hacku", který tam je proto, aby v poli normálně fungovaly klávesy jako šipky, tab, enter apod. V některých prohlížečích by šly i tak, jinde by se někdo mohl dost divit, proč že mu ten home a end nejde. Nevím, jestli je ten seznam kompletní, ale zatím si nikdo nestěžoval. Bez jQuery a jeho inArray by šlo prostě napsat if(k==13,k==8,k==9,k==16/*...atd...*/) return true; První řádek té funkce se pokoušeí zajistit kompatibilitu se staršími prohlížeči. Druhý zajišťuje, aby se odchytilo všechno. Možná by to šlo zapsat elegantněji, ale tohle funguje. |
||
_es Profil |
#13 · Zasláno: 11. 10. 2013, 22:39:21
quatzael:
Ak tam má návštevník zadať číslo, no zadá niečo iné, tak si ho asi nedostatočne informoval, čo tam má zadať. Prečo neriešiš to, ale niečo, čo treba aj tak ešte overiť na serveri? |
||
quatzael Profil |
#14 · Zasláno: 12. 10. 2013, 00:20:29 · Upravil/a: quatzael
Amunak:
Zkouším to, ale vůbec nic to nedělá.. Funkce se spustí, ale nic se opravdu neděje, chová se to furt jako klasickej input.. můžu tam psát co chci a povolí to všechno.. anonymni, Zechy, quatzael: Je to taková pojistka, kdyby tam náhodou chtěl zadávat nějaký desetinný čárky apod. |
||
Amunak Profil |
|||
quatzael Profil |
#16 · Zasláno: 12. 10. 2013, 10:35:10
Amunak:
Teď to funguje, ale prve jsi uvedl jen kód, který umožňuje všechny klávesy. „Tím že nerozlišuju mezi keyCode a which se mi některá čísla jakoby "sloučí"“ Nerozumím, jak sloučí? |
||
Amunak Profil |
#17 · Zasláno: 12. 10. 2013, 10:39:39
quatzael:
Netvrdil jsem, že je to už upravený kód. „Nerozumím, jak sloučí?“ Jestli tomu rozumím dobře, když je keyCode prázdný a použije se which, můžeš dostat zpátky číslo, které odpovídá nějaké klávese, která píše znaky. Když to pak povolíš, jde ti jak ta povolená kontrolní klávesa, tak i nějaká jiná, která něco píše. Třeba proto jsem zakázal klávesu delete, aby nešla psát desetinná tečka, nebo tak něco. |
||
pcmanik Profil |
quatzael:
Malo by fungovať, nemám teraz prístup k pc tak nemám ako vyskúšať. element.onkeypress = function (event) { event = event || window.event; if (!/\d/.test(String.fromCharCode(event.keyCode))) event.preventDefault ? event.preventDefault() : event.returnValue = false; }; |
||
quatzael Profil |
pcmanik:
Jo tohle funguje. A vypadá, že bez problému. Dík moc! Tak teď ale který řešení je vhodnější? Tvoje nebo Amunakovo? |
||
Amunak Profil |
quatzael:
To jeho Ačkoliv se mi úplně nedaří reprodukovat funkčnost. |
||
pcmanik Profil |
Amunak:
keyCode klávesy sa premení na string a ten sa následne odtestuje voči reguláru či sa jedná o číslo. Ak sa nejedná o číslo tak sa podľa prehliadačov zablokuje písanie - pre tie "normálne" preventDefault a pre IE returnValue. Alebo som zle pochopil tú vetu? |
||
Amunak Profil |
pcmanik:
Já jsem pochopil jak to funguje, ale nepodařilo se mi to rozchodit na té původní ukázce. Akorát... Neblokuje ti to náhodou taky klávesy jako home, end, šipky, tab, escape a podobně? Právě proto by asi bylo u obou ukázek lepší používat jenom event.charCode. |
||
quatzael Profil |
#23 · Zasláno: 12. 10. 2013, 12:00:18
Amunak:
„Neblokuje ti to náhodou taky klávesy jako home, end, šipky, tab, escape a podobně?“ Mě to neblokuje nic (obě řešení jsou ok) i na jiných prohlížečích. |
||
Časová prodleva: 11 let
|
0