Yeah, bede Cie musial umiescic w about dot. serwisu GTR
Dzieki
Napisalem sobie troche funkcji ktore razem dają nastepujacy rezultat:
1. ograniczaja ilosc liter wpisywanych do pola textowego
2. ograniczaja typ wpisywanych znakow (tylko cyfry, tylko litery, tylko znaki do nr telefonu etc)
3. Rozpoznaja czy text w polu jest selected (potrzebne aby wylaczyc ograniczanie ilosci znakow gdy jest wpisana max ilosc ale przy selected trzeba pozwolic na wpisanie pierwszego znaku - zamiana zaznaczonego fragmentu)
Ogolnie dziala to super. I aplikacje pisane pod pzegladarke naprawde wiele na tym zyskuja.
Niestety nie dziala to do konca pod Firefoxem. Przypuszczalnie FF nie potrafi rozpoznac lub trzeba uzyc innej metody na rozpoznanie jaki klawisz zostal wcisniety. Bo np przy max liczbie znakow w polu nie dziala backspace czy delete (a w takiej sytuacji powinien). Ponizej moje funkcje JS.
Dwie ciekawostki. Dla pol textowych (<INPUT type="text"...) w IE nie dziala metoda onChange. Dziala np. dla Selectow. Wieksza ciekawostka jest to ze jesli wpisywanym znakiem jest nawias otwierajacy '(' to funkcja go przepuszcza mimo ze jej nie wolno. za to prawidlowo reaguje na zamykajacy nawias.. i jest kilka raptem takich znakow jeszcze.
function CountSpecyficChars(formnr, elementnr, len, e, mode)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
if ((keycode==8) || (keycode==9) || (keycode==13) || (keycode==16) || (keycode==39) || (keycode==37) || (keycode==38) || (keycode==40)) { return true; }
var m = document.forms[formnr].elements[elementnr].value;
var mm = m.length;
if (mode) if (!KeyCheck(0,e,mode)) return false;
if (mm>=len) return false;
return true;
}
function KeyCheck(myfield,e, mode)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;
// alert (mode + ' ' + keycode );
// space
if ((mode == 'alphanumpl' || mode == 'alphapl' || mode == 'alphanum' || mode == 'alpha' || mode == 'phone') && keycode==32) return true;
// numeric
if ((mode == 'num' || mode == 'alphanumpl' || mode == 'alphanum' || mode == 'nip' || mode == 'postal' || mode == 'phone' || mode == 'email') && ((keycode>47 && keycode<58 ) || keycode==8 || keycode==13) ) return true;
if (mode == 'nip' && keycode==45) return true;
if (mode == 'postal' && keycode==45) return true;
if (mode == 'phone' && (keycode==45 || keycode==41 || keycode==43)) return true;
if ((mode == 'alphanum' || mode == 'alpha' || mode == 'email') && ((keycode>=65 && keycode<=90) || (keycode>=97 && keycode<=122))) return true;
if (mode == 'email' && (keycode==64 || keycode==45 || keycode==46 || keycode==94)) return true;
if ((mode == 'alphanumpl' || mode == 'alphapl') && ((keycode>=65 && keycode<=90) || (keycode>=97 && keycode<=122) || (keycode>=260 && keycode<=263) || keycode==280 || keycode==281 || (keycode>=321 && keycode<=324) || keycode==211 || keycode==243 || keycode==346 || keycode==347 || (keycode>=377 && keycode<=380) )) return true;
return false;
}
wykorzystanie to dodanie eventu, np
onKeyPress="return CountSpecyficChars(0,4,20,event,'num')";
pominiecie parametru ostatniego powoduje tylko ograniczenie dlugosci pola bez ograniczenia typu danych.
Z gory dzieki za pomoc. Jesli komus sie skrypty/pomysly podobaja moze je swobodnie wykorzystywac. ja tez sie wzorowalem na rozwiazaniach dostepnych w necie.