Centrum skryptów - Systemy operacyjne

Jak spowodować wyświetlanie domyślnej wiadomości, jeśli nic nie zostanie wpisane w pole tekstowe?

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 spowodować wyświetlanie domyślnej wiadomości, jeśli nic nie zostanie wpisane w pole tekstowe?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Czasem na niektórych stronach internetowych natykam się na pole tekstowe, które zawiera jakąś instrukcję, na przykład „Proszę wpisać opis w tym polu”. Po kliknięciu na nim instrukcja znika, natomiast jeśli kliknę to pole, nic w nim nie wpiszę i kliknę w innym miejscu, instrukcja pokazuje się na nowo. Jak można zrobić to samo w aplikacji HTA?

-- AJ

Cześć Skrypciarze! Odpowiedź

Cześć, AJ! Przepraszam, jeżeli odpowiedź na Twoje pytanie będzie trochę chaotyczna, ale dopiero co się obudziłem i piszę to z jednym okiem otwartym, a moje myśli i tak krążą wokół ekspresu do kawy i faktu, że się zepsuł. Jem więc tego donata, ale bez kawy jest jakoś inaczej, nawet nie chce mi się wysilać na dowcip, wiecie sami jak to jest – 7:30 bez kawy... Nie narzekam, ale mężczyźni przywiązują dużą wagę do rytuału. Podczas drogi do pracy za każdym razem kupuję sobie donata i popijając kawą celebruję początek dnia. Dziś jednak mam ochotę raczej rzucić w kogoś tym donatem...zupełnie tak jak Skrypciarski Ojciec, znalazłszy w swojej herbacie cytrynę o grubości większej niż 3 mm, lub Skrypciarska Matka, znajdując wodę w mydelniczce.

No, ale skoro kawy brak, mam chociaż czas posiedzieć trochę nad skryptem, co prawda tylko z jednym okiem, ale Kapitan Hook tudzież Nemo (czy on miał opaskę na oku??) jakoś sobie przecież w życiu radzili. Być może kolejnym moim rytuałem stanie się teraz doradzanie, jak utworzyć pole tekstowe, które pokazuje wiadomość domyślną, znikającą po kliknięciu na nie, a potem ponownie się pojawia, jeżeli użytkownik nie wpisze w nie odpowiedniej wartości.

Nie wiecie, o co dokładnie chodzi AJ? Spróbujcie zatem skopiować poniższy kod do Notatnika, zapiszcie następnie jako aplikację HTML, i spróbujcie sami:

<SCRIPT LANGUAGE="VBScript">



Sub TextBoxEnter

    If TextBox1.Value = "Please enter a value here." Then

        TextBox1.Value = ""

    End If     

End Sub



Sub TextBoxLeave

    If TextBox1.Value = "" Then

        TextBox1.Value = "Please enter a value here."

    End If     

End Sub



</SCRIPT>



<body>

    <input type="text" name="TextBox1" size="50" value="Please enter a value here." 

     onFocus = "TextBoxEnter" onFocusOut="TextBoxLeave"><p>

    <input type="text" name="TextBox2" size="50">

</body>

Dobry pomysł! Spójrzmy teraz, jak działa nasza aplikacja HTA. Nie jest bowiem skomplikowana, składa się tylko z dwóch formantów (pary pól tekstowych). Jeden z nich – TextBox2 – jest naszym starym polem tekstowym, dlatego tagi HTML są takie krótkie:

<input type="text" name="TextBox2" size="50">

Drugie pole tekstowe o nazwie TextBox1 (tak, sami wpadliśmy na tę oryginalną nazwę) jest jeszcze bardziej szalone:

<input type="text" name="TextBox1" size="50" value="Please enter a value here."

onFocus = "TextBoxEnter" onFocusOut="TextBoxLeave">

Co w tym tak szalonego? Dla początkujących: musimy przypisać polu tekstowemu wartość docelową. Podczas pierwszego otwierania aplikacji HTA chcemy, aby pole pokazało polecenie Please enter a value here (Proszę wpisać tu wartość), dlatego właśnie dodaliśmy parametr value (wartość) w następujący sposób:

value="Please enter a value here."

Pole tekstowe oprócz wartości, musi reagować jeszcze na dwa zdarzenia: zdarzenie onFocus, które ma miejsce, kiedy klikniemy na nim lub zaznaczymy je w inny sposób, oraz onFocusOut, kiedy to zmieniamy fokus na inny obiekt poza polem tekstowym. Podczas każdego z tych zdarzeń uruchamiamy odpowiedni podprogram – za każdym razem, gdy fokus jest na polu tekstowym, uruchamiamy podprogram TextBoxEnter, natomiast, gdy przesuwamy fokus w inne miejsce, uruchamiamy podprogram TextBoxLeave.

Uwaga: Prosimy o uznanie dla szokująco oryginalnych nazw dla podprogramów!

Cała zabawa dzieje się właśnie wewnątrz tych dwóch podprogramów o jakże barwnych nazwach. Spójrzmy na pierwszy z nich:

Sub TextBoxEnter

    If TextBox1.Value = "Please enter a value here." Then

        TextBox1.Value = ""

    End If     

End Sub

Domyślnie nasze pole tekstowe powinno pokazać wiadomość Please enter a value here. W sumie o to nam chodziło, więc sukces! Nie chcemy jednak, żeby ta wiadomość pokazywała się za każdym razem, pamiętamy przecież, że wiadomość ma znikać, jeżeli użytkownik kliknie na nasze pole tekstowe ( w przeciwnym wypadku trzeba by było zaznaczyć wiadomość, usunąć ją i dopiero potem wpisywać wartość). Więc jak programistycznie sprawić, żeby znikła? Proste, ustawiamy wartość pola tekstowego jako pusty ciąg znaków:

TextBox1.Value = ""

Pamiętać należy, że nie chcemy, aby wartość pola tekstowego była pusta zawsze, gdy formant ma fokus. Chodzi nam o to, żeby znikał tylko tekst „Please enter a value here.” Jak to zrobić? Wyobraźcie sobie, że ktoś ma pragnienie serca, aby wpisać właśnie taką wartość w pole tekstowe:

Pharmaceutical Research Division, Fabrikam Corp

Oczywiście gołym okiem widać, że brakuje tu kropki i że tak naprawdę wartość powinna wyglądać właśnie tak:

Pharmaceutical Research Division, Fabrikam Corp.

Dodanie kropki nie jest chyba trudne, wymaga od nas tylko kliknięcia na koniec pola tekstowego i wpisania brakującej kropki. Można to zrobić oczywiście tylko, jeżeli wartość pola tekstowego nie będzie kasowała się automatycznie za każdym razem, kiedy pole tekstowe uzyska miało fokus. Dlatego też nie będziemy resetować tej wartości automatycznie, będzie to miało miejsce tylko, jeżeli pojawi się domyślna wiadomość „Please enter a value here”. W przeciwnym razie po każdym kliknięciu na polu tekstowym tracilibyśmy wszystko, co wcześniej zostało wpisane.

Jeżeli pole tekstowe traci fokus, mamy do czynienia z następującą sytuacją:

Sub TextBoxLeave

    If TextBox1.Value = "" Then

        TextBox1.Value = "Please enter a value here."

    End If     

End Sub

Nasz podprogram onFocusOut jest odbiciem lustrzanym podprogramu onFocus. Tym razem sprawdzamy, czy wartość pola tekstowego TextBox1 równa jest pustemu ciągowi znaków. Jeżeli tak jest, oznacza to, że nic nie zostało w nie wpisane. W rezultacie, ustawiamy jego wartość na wiadomość domyślną: Please enter a value here. Dzięki temu nasze pole tekstowe nigdy nie będzie do końca puste. Jeżeli jest puste, to docelowa wiadomość pojawia się ponownie. Co jednak, jeżeli wpiszemy co innego niż wiadomość domyślną? W sumie nic. Jeśli w polu tekstowym znajduje się jakaś zawartość, zostawiamy tę wartość w spokoju. Połączenie tych dwu podprogramów powinno dać nam takie zachowanie, o jakie chodziło.

To chyba na tyle, zabawnej pointy nie da się napisać z tylko jednym okiem, i to tylko w połowie otwartym...

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne