Centrum skryptów - Systemy operacyjne

Jak zapobiec wpisywaniu przez użytkowników czegokolwiek oprócz cyfr do pola tekstowego HTA?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak zapobiec wpisywaniu przez użytkowników czegokolwiek oprócz cyfr do pola tekstowego HTA?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Mamy HTA, którego używamy do wprowadzania danych. W jednym z pól tekstowych nasi użytkownicy powinni wpisywać jedynie cyfry. Jak zapobiec wpisywaniu przez nich czegokolwiek innego do tego pola tekstowego?

-- KV

Cześć Skrypciarze! Odpowiedź

Cześć, KV. Wiesz, to naprawdę dobre pytanie: czy można zapobiec wpisywaniu czegokolwiek oprócz cyfr do pola tekstowego? Odpowiedź na to pytanie brzmi: tak, istnieje sposób, aby zapobiec wpisywaniu czegokolwiek oprócz cyfr do pola tekstowego. Dziękujemy za pytanie, KV. Do zobaczenia jutro!

Zaraz, zaraz. Nasza Redaktorka wydaje się mieć problem z dzisiejszym artykułem. Jaki to problem? Nie, jeśli KV naprawdę chciała wiedzieć, jak zapobiec wpisywaniu czegokolwiek oprócz cyfr do pola tekstowego, spytałaby, jak to zrobić.

Ależ nie. Przewińcie w górę i sami zobaczcie.

Och. Cóż, musiała dodać to później, bo jesteśmy pewni, że nie było tego w pierwotnej wersji.

W każdym razie wróciliśmy. Jak właśnie mieliśmy powiedzieć (zanim nam tak niegrzecznie przerwano), KV chce wiedzieć jak zapobiec wpisywaniu czegokolwiek poza cyframi do pola tekstowego. Jak może to zrobić? Prawdę mówiąc, nie mamy pojęcia. Gdybyśmy wiedzieli, jak robić takie rzeczy, mielibyśmy prawdziwą pracę.

Uwaga. Jeśli myślicie sobie “Założę się, że Microsoft pozwala jedynie najlepszym i najbystrzejszym ze swoich pracowników pisać artykuły z serii Cześć Skrypciarze!”, to cóż, pomyślcie jeszcze raz.

Prawda jest taka, KV, że nie wiemy, jak zapobiec wpisywaniu czegokolwiek poza cyframi do pola tekstowego. Ale spróbujmy paru rzeczy i zobaczmy, co się stanie. Nie... Nie.... Blisko, ale nie do końca... Auć! To bolało... Nie... A, mamy! Zrobiliśmy to!

Ups. Fałszywy alarm. Najwyraźniej W nie jest cyfrą...

Zaczekaj chwilę, KV; może jednak mamy coś dla Ciebie:

<SCRIPT Language ="VBScript">

    Sub KeyCheck

        If Window.Event.KeyCode < 48 OR Window.Event.KeyCode > 57 Then 

            Window.Event.returnValue = False    

        End If

    End Sub

</SCRIPT>



<BODY>

    <INPUT TYPE=text onKeyPress="KeyCheck">

</BODY>

Trochę naszukaliśmy się w HTML and DHTML Reference (j. ang.) na MSDN, ale wygląda na to, że powinno to zadziałać. Jak widzicie, mamy tu bardzo proste HTA składające się z jednego pola tekstowego i jednej podprocedury (Co, nie wiecie nawet, co to jest HTA? W takim razie powinniście zajrzeć do HTA Developers Zone (j. ang.).) Zacznijmy od przejrzenia kodu tworzącego pole tekstowe:

<INPUT TYPE=text onKeyPress="KeyCheck">

Nie ma tu nic szczególnie wymyślnego: po prostu używamy tagu INPUT aby utworzyć pole tekstowe, dodając parametr TYPE=text aby upewnić się, że otrzymamy pole tekstowe. (Jeśli nie znacie się na HTML, tagu INPUT można również użyć aby dodać formanty takie jak przyciski, pola wyboru i przyciski opcji do HTA.) Następnie dodajemy następujący parametr na końcu tagu INPUT:

onKeyPress="KeyCheck"

Do czego to służy? Cóż, za każdym razem, gdy użytkownik wciśnie jakiś klawisz podczas pracy z HTA (albo na stronie sieci Web), uruchamiane jest zdarzenie onKeyPress. Ten parametr mówi po prostu, “Dobra, HTA; Chodzi o to: jeśli uruchomione zostanie zdarzenie onKeyPress i jeśli zdarzy się to w naszym polu tekstowym, uruchom podprocedurę o nazwie KeyCheck.” Innymi słowy, jeśli wpisujecie coś do pola tekstowego, za każdym razem gdy wciśniecie jakiś przycisk, HTA wywoła podprocedurę KeyCheck.

Co robi podprocedura KeyCheck? Cóż, jak zapewne wiecie, każdy klawisz na klawiaturze ma przypisaną wartość. (Możecie znaleźć listę klawiszy i odpowiadających im wartości na MSDN.) Pierwszą rzeczą, którą robimy w tej procedurze jest sprawdzenie, czy KeyCode (które jest właściwością zdarzenia onKeyPress) wynosi mniej niż 48 lub więcej niż 57:

If Window.Event.KeyCode < 48 OR Window.Event.KeyCode > 57 Then

Dlaczego mielibyśmy zrobić coś takiego? Odpowiedzią jest poniższa tabelka wartości przypisanych do klawiszy od 0 do 9:

KlawiszWartość
048
149
250
351
452
553
654
755
856
957

 

Innymi słowy, jeśli klawisz ma wartość od 48 do 57, to musi to być jeden z klawiszy od 0 do 9. Oznacza to też, że klawisz o wartości mniejszej od 48 lub większej od 57, nie może być jedną z cyfr od 0 do 9. Sprawdzając wartość właściwości KeyCode możemy określić, jakie klawisze wciska użytkownik.

Jeśli użytkownik wcisnął cyfrę od 0 do 9, wszystko jest w porządku. W takim wypadku nie robimy nic oprócz wyjścia z podprocedury. Załóżmy jednak, że użytkownik wcisnął klawisz, który nie jest jedną z cyfr od 0 do 9. Na przykład załóżmy, że użytkownik wpisał literę x, która ma wartość 120. Co stanie się wtedy?

Oto, co się stanie:

Window.Event.returnValue = False

Co ciekawe, zdarzenia mają całą masę właściwości, w tym returnValue. Co robi właściwość returnValue? Gdy ma wartość True (domyślną), zwraca wartość zdarzenia. W tym wypadku oznacza to, że zwróci fakt, że użytkownik wcisnął klawisz na klawiaturze. Jeśli jednak wartość returnValue ustawimy na False, wartość zdarzenia nie jest zwracana; w pewnym sensie jest tak, jakby zdarzenie nie miało miejsca. Jeśli użytkownik wcisnął klawisz inny niż cyfry od 0 do 9, ustawiamy wartość False właściwości returnValue i wartość zdarzenia jest odrzucana; oznacza to, że żaden znak nie zostanie wpisany do pola tekstowego.

Zdezorientowani? Spróbujcie sami. Jeśli wpiszecie cyfrę od 0 do 9 (włącznie), te wartości pojawią się w polu tekstowym. Ale jeśli wpiszecie coś innego...

Mamy nadzieję, że to pomogło, KV. Przepraszamy za zamieszanie na początku artykułu. Nie mieliśmy pojęcia, że mamy wyjaśnić jak zapobiec wpisywaniu czegokolwiek oprócz cyfr w polu tekstowym. Na szczęście nasza Redaktorka czuwała i dzięki niej nieźle się napracowaliśmy, chociaż tego nie planowaliśmy. A zapowiadał się dla nas pierwszy ładny dzień w Redmond (gdy tu siedzimy, za oknem świeci słońce i jest 20 stopni). Ale…

Czy możemy ustalić, że świeci słońce i jest 20 stopni patrząc przez okno? Jasne, że tak. A przynajmniej moglibyśmy, gdybyśmy mieli okno. Tak, Skrypciarz piszący te słowa nie ma nawet okna w biurze. Co ciekawe, Redaktorka musiała kiedyś w życiu zrobić coś tak wspaniałego, że ma okno w swoim biurze. Ale ona na to zasługuje. Tak, jak na wiele innych rzeczy. Zgodzisz się ze mną?

Odpowiedź Redaktorki: Absolutnie. Na pewno nie chodzi o nic, o czym myśli Skrypciarz piszący ten artykuł, ale Redaktorka zdecydowanie zasługuje na wiele rzeczy – szczególnie na swoje okno.
 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne