Wykład 4 - Republika WWW
Transkrypt
Wykład 4 - Republika WWW
Obsługa zdarzeń • zdarzenia - wszystko co zachodzi w związku z obiektami JavaScript (np. window) i elementami XHTML • przeglądarka moŜe wywołać funkcję do obsługi zdarzenia (ang. event handler) • atrybuty XHTML np.: onclick, onmouseover, onload, słuŜą do prostej obsługi zdarzeń i za pomocą JavaScript pozwalają modyfikować obsługę zdarzeń „w locie” • funkcje moŜna przypisać do obiektów lub elementów XHTML (przez DOM) za pomocą addEventListener() JavaScript - wykład 4 Zdarzenia i formularze Beata Pańczyk element.addEventListener(funkcja, zdarzenie, kolejność) 1 • • • • 2 Zdarzenia Mysz Mysz Klawiatura Logiczne Obiekt event - funkcja obsługująca zdarzenie jako pierwszy argument dostanie obiekt, który zawiera szczegółowe informacje o zdarzeniu i pozwala kontrolować dalszy jego los • click • dblclick • mousedown i mouseup - bardziej szczegółowa reakcja na kliknięcie - gdy przycisk został wciśnięty i puszczony • mouseover i mouseout - przydatne do pokazywania np. dynamicznych menu i „dymków”; działają tylko, gdy uŜytkownik uŜywa myszy (niezaleŜne od urządzenia są focus i blur) 3 4 Logiczne Klawiatura • focus i blur - to stan, gdy np. pole tekstowe czeka na wpisanie tekstu lub odnośnik został zaznaczony z klawiatury. Te zdarzenia zachodzą, gdy element zyskuje lub traci focus • load i unload - zachodzą na <body>, gdy dokument zostanie załadowany do końca (load) i gdy uŜytkownik zamknie lub przejdzie do innego dokumentu (unload); przeglądarki mogą blokować lub ograniczać działanie unload (broniąc się przed złośliwymi skryptami), dlatego nie moŜna na nim polegać. • submit - wysłanie formularza • keypress - wciśnięcie klawisza (analogiczne do click); obiekt event będzie zawierał kod wciśniętego klawisza • keydown i keyup - moment wciśnięcia i puszczenia klawisza (podobnie jak mousedown i mouseup) 5 6 1 Funkcja obsługi zdarzenia przykład Funkcja obsługi zdarzenia • obsługa zdarzeń – w ciele dokumentu • funkcja obsługi zdarzenia - reakcja na zdarzenie • funkcje obsługi zdarzeń wywoływane atrybutami onEvent="kod_JavaScript" • funkcja obsługi zdarzenia moŜe przyjmować jedną z dwu form: – wywołanie funkcji – kod bezpośredni <a href="url" onMouseOver = "kod_javascriptu" onMouseOut = "funkcja_javascriptu()" > tekst odsyłacza, który pojawi się na stronie </a> 7 8 Zdarzenie onClick Zdarzenie onMouseOver i onMouseOut <a href="http://www.lublin.pl" onclick="confirm('Połączenie z Lublinem')"> Lublin </a> <a href="http://www.lublin.pl" onmouseover="confirm('Najpiękniejsze miasto świata!')" onmouseout="alert('Opuszczasz Lublin?')" > Lublin </a> 9 Zdarzenie onLoad i unLoad <body 10 Zdarzenie onFocus onload="alert('Witaj !!!')" onunload="alert('śegnaj!!!')" > • Wywoływane w chwili przeniesienia kursora w pole tekstowe • Występuje przed zdarzeniem onBlur • Znaczniki: <body>, wszystkie elementy formularzy • Przykład <input type="text" name="email" onfocus="this.value='';"> Zdarzenie unload – blokowane przez przeglądarki 11 12 2 Zdarzenie onBlur Zdarzenie onChange • Wywoływane w chwili opuszczania pola tekstowego (po zdarzeniu onFocus) • Znaczniki: <body>, wszystkie elementy formularzy • Przykład • Wywoływane w chwili opuszczania pola tekstowego, którego zawartość została zmieniona (po zdarzeniu onFocus) • Elementy formularzy: select, text, textarea, password • Przykład <input type="text" name="email" onfocus="this.value='';" onblur="sprawdz(this.value);"> <input type="text" name="email" onchange="sprawdz(this.value);"> 13 14 Formularze Zdarzenie onSelect • Wywoływane w chwili podświetlenia tekstu wewnątrz pola tekstowego (po zdarzeniu onFocus) • Elementy formularzy: select, text, textarea, password • Przykład <input type="text" name="email" onselect="sprawdz(this.value);"> 15 • Za pomocą JavaScript moŜna w pełni kontrolować formularze na stronach: – sprawdzać poprawność danych – zmieniać zachowanie elementów formularza (np. pozwalać na wpisywanie tylko cyfr w polu tekstowym) – dynamicznie pokazywać i ukrywać jego części. • MoŜna skorzystać ze zwykłych metod DOM (getElementById(), nextSibling, itd.), ale W3C DOM posiada teŜ specjalne metody dostępu do formularzy, które w praktyce często są łatwiejsze w uŜyciu Odnalezienie formularza Elementy formularza • Kolekcja document.forms zawiera wszystkie formularze na stronie • document.forms[0] - obiekt reprezentujący pierwszy element <form> na stronie • jeśli formularz ma atrybut name, to moŜna go wybrać po nazwie w kolekcji document.forms: <form name="nazwaformularza"> ... document.forms['nazwaformularza'] document.forms.nazwaformularza • W starych skryptach i kursach moŜna spotkać jeszcze bardziej skrócony zapis document.nazwaformularza — ten sposób jest niestandardowy, przestarzały i nie będzie działał w kaŜdej przeglądarce • Wewnątrz obiektu formularza moŜna odwoływać się do jego pól po nazwach za pośrednictwem kolekcji elements: document.forms[0].elements['nazwaelementu'] • lub (w przeciwieństwie do formularzy w obiekcie document) odwoływać się bezpośrednio po nazwie: document.forms[0].nazwaelementu 16 document links[0] 17 images[0] forms[0] links[1] elements[0] elements[1] elements[2] elements[3] 18 3 Zmienna tymczasowa document.forms, atrybut value • var f = document.forms[0] • kaŜdy element formularza ma pole form, które wskazuje formularz, do którego element naleŜy szczególnie przydatne przy obsłudze zdarzeń var textbox = document.forms[0].przykladowy_element; textbox.form.inny_element • prawie kaŜde pole formularza ma atrybut value, które zawiera jego wartość: document.forms.daneOsobowe.imie.value (odczyta zawartość pola o nazwie „imie”) Zdarzenia dla formularza • submit - zdarzenie generowane przez element <form> tuŜ przed wysłaniem formularza • onchange, onclick, onkey – zmiany • onfocus/onblur - aktywacja 19 Właściwości obiektu form • • • • • • • name method action encoding target length elements 20 Obsługa formularzy atrybut NAME atrybut METHOD atrybut ACTION atrybut ENCTYPE atrybut TARGET liczba elementów w formularzu tablica elementów składowych formularza • Metody obiektu form –reset() czyści zawartość wszystkich pól formularza –submit() wysyła zawartość formularza • Przykład wysłania formularza mojFormularz document.forms.mojFormularz.submit() • Obsługa zdarzeń: onReset, onSubmit 21 Właściwości wszystkich elementów formularzy • name • value • type • form 22 Metody elementów formularzy łańcuch znaków odpowiadający nazwie elementu (atrybut NAME) łańcuch znaków zawierający wartość elementu (atrybut VALUE) łańcuch znaków odpowiadający nazwie typu (atrybut TYPE) odwołanie do obiektu form (formularza), w którym dany element został umieszczony sprawia, Ŝe dany element przestaje być aktywny (wszystkie elementy) uaktywnia dany element • focus() (wszystkie elementy) symuluje kliknięcie myszą obiektu • click() (button, checkbox, radio, reset, submit) • select() zaznacza cały tekst w polu (password, text, textarea) • blur() 23 24 4 Składniki elementów formularzy Składniki elementów formularzy • Obiekt select – length • Obiekty text, password, textarea łańcuch znaków – defaultValue z początkową wartością pola • Obiekt checkbox – checked – defaultChecked liczba opcji tablica opcji zdefiniowanych znacznikiem <option> – selectedIndex indeks aktualnie wybranej opcji – options stan pola (true lub false) stan początkowy • Właściwości elementów tablicy options • Obiekt radio – length – Checked – defaultChecked – text – value – selected – defaultSelected liczba opcji 25 26 Przykład 1a Walidacja formularzy http://republika.onet.pl/13965,15350,10,06-02,kursy.html#15350 Dwa sposoby walidacji: • pierwszy - przypisanie zdarzeniu onsubmit własnej procedury obsługi • drugi - zastąpienie przycisku submit własnym 27 28 Przykład 1a – plik walid1.html <head> <title>Walidacja 1</title> <script type="text/javascript" src="walid1.js"></script> </head> <body> <form name="formularz1" action="index.php" method="get"> <div>Proszę podać swoje dane:<br /> <h5>(Pola oznaczone * muszą zostać wypełnione)</h5> </div> <table> <tr><td>Imię:</td> <td><input type="text" name="imie"></td></tr> <tr><td>Nazwisko:</td> <td><input type="text" name="nazwisko">*</td> </tr> <tr> <td>Tel.:</td> <td><input type="text" name="tel">*</td></tr> <tr><td></td><td align="center"> <input type="button" name="wyslij" value="Wyślij!" onclick="sprawdz()" > </td></tr> </table></form></body></html> Przykład 1a – plik walid1.js function sprawdz() { var brakuje_danych=false; var formularz=document.forms[0]; var napis=""; if (formularz.nazwisko.value == "") { if (formularz.tel.value == "") } { napis += "nazwisko\n"; brakuje_danych=true; napis += "telefon\n"; brakuje_danych=true; } if ( !brakuje_danych) formularz.submit(); else alert ("Nie wypełniłeś następujących pól:\n" + napis); } 29 30 5 Przykład 2 – radio.html Przykład 1b Gdyby w formularzu znalazł się element submit, naleŜałoby : • zmienić komórkę tabeli <td align="center"> <input type="submit" name="wyslij" value=" Wyślij! "> </td> • aby przechwycić zdarzenie onsubmit dla formularza, zmodyfikować naleŜy równieŜ znacznik form: <form name="formularz1" action="index.php" method="get" onsubmit="return sprawdz();" > • funkcję sprawdz() zmodyfikować do postaci: if (!brakuje_danych) return true; else { alert ("Nie wypełniłeś następujących pól:\n" + napis); return false; } <head><script type="text/javascript" src="sprawdz.js"> </script></head> <body> <form action="mailto:[email protected]?subject=test" method="post" onsubmit="return sprawdz();"> <p> <br/>Najbardziej lubisz: <input type="radio" name="wybor" value="d"/>Delphi <input type="radio" name="wybor" value='c' />C++ <input type="radio" name="wybor" value='j'/>Java <input type="submit" value="wyślij"/> </p> </form></body></html> 31 Przykład 2 – sprawdz.js 32 Przykład 3 -wybór opcji function sprawdz() { ile=document.forms[0].wybor.length; for (i=0;i<ile;i++) { wybrany=document.forms[0].wybor[i].checked; if (wybrany) break; } if(!wybrany) { alert("Musisz wybrać język! "); document.forms[0].wybor[0].focus(); return false; } else return true; } 33 <head><script type="text/javascript" src="js3.js"></script> </head> <body> <form action="mailto:[email protected]?subject=test" method="post" onsubmit="return wyslijDane(this)"> <h3>Wybierz kolor:</h3> <p> <select name="kolor"> <option value="" selected="selected">wybierz kolor</option> <option value="czerwony">czerwony</option> <option value="zielony">zielony</option> <option value="niebieski">niebieski</option> </select> <br/> <input type="submit" value="wyślij"/> </p> </form> </body></html> 34 Przykład 3 Przykład 3 – plik js3.js function wyslijDane(form) { wybrany=form.kolor.selectedIndex; if (form.kolor.options[wybrany].value=="") { alert("Musisz wybrać kolor"); form.kolor.focus(); return false; } return true; } 35 36 6