1 Politechnika Poznańska Instytut Automatyki i Inżynierii

Transkrypt

1 Politechnika Poznańska Instytut Automatyki i Inżynierii
Politechnika Poznańska
Instytut Automatyki i Inżynierii Informatycznej
Zakład Bezpieczeństwa Systemów Informatycznych
przedmiot:
PROGRAMOWANIE W SIECI WWW - laboratorium
grupa docelowa:
INFORMATYKA, semestr 7, dzienne I-stopnia
Temat: JavaScript, jQuery
Teoria (obowiązkowa):
JavaScript: http://www.w3schools.com/js/default.asp
jQuery:
http://jquery.com/ (wybrane fragmenty)
Cel:
Celem laboratorium jest zapoznanie się z podstawami języka JavaScript oraz biblioteki
jQuery realizujących określone zadania po stronie klienta.
Zadanie 1 (Formularz):
1. Stwórz poprawny dokument XHTML (poprawny czyt. valid XHTML 1.1) z
formularzem zgłoszeniowy zawierający pola: adresat, firma, e-mail, kod pocztowy,
ulica, miasto reprezentant firmy. Nazwij go np. PwS_3_form.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PwS lab 3 - Formularz zgłoszeniowy</title>
</head>
<body>
<form action="">
<table cellpadding="3" cellspacing="3" width="30%">
<tr>
<td>Wyślij do:</td>
<td>
<select name="sendTo">
<option value="sekretariat">sekretariat</option>
<option value="dział sprzedaży">dział sprzedaży</option>
<option value="dział techniczny">dział techniczny</option>
</select>
</td>
</tr>
<tr>
<td>Firma:</td>
<td><input type="text" name="company" /></td>
</tr>
<tr>
<td>E-mail:</td>
<td><input type="text" name="emailAddress" /></td>
1
</tr>
<tr>
<td>Kod pocztowy:</td>
<td><input type="text" name="zip maxlength="6" /></td>
</tr>
<tr>
<td>Miasto</td>
<td><input type="text" name="city" /></td>
</tr>
<tr>
<td>Ulica</td><td><input type="text" name="street" /></td>
</tr>
<tr>
<td>Reprezentant firmy:</td>
<td><input type="text" name="contactName" /></td>
</tr>
<tr>
<td>Wiadomość</td>
<td><textarea rows="7" cols="20" name="message"></textarea></td>
</tr>
<tr>
<td>Wyrażam zgodę na przetwarzanie danych umieszczonych w formularzu. </td>
<td>
<input type="radio" name="agree" value="Yes" />Tak <br/>
<input type="radio" name="agree" value="No" />Nie
</td>
</tr>
<tr>
<td></td>
<td><input type="button" id="sendButton" value="Wyślij" /></td>
</tr>
</table>
</form>
</body>
</html>
2. Stwórz w tym samym katalogu dokument tekstowy jsValidator.js w którym zostaną
umieszczone funkcję sprawdzające poprawność wprowadzonych danych. Weryfikacji
powinna podlegać długość przekazanych tekstów, poprawność formatu adresu e-mail i
kodu pocztowego, nazwisko reprezentanta jest opcjonalne, reszta pól jest
obligatoryjna. Przycisk Wyślij powinien się pojawiać dopiero po akceptacji „Zgody na
przetwarzanie danych” (zostanie to zrealizowane w ostatnim etapie).
3. We
wcześniej
przygotowanym
pliku
jsValidator.js
umieść
prostą
funkcję
sprawdzającą długość przekazanego parametru:
function emptyCheck( param ){
if ( param.length == 0 ){
return true
}else {
return false
}
}
4. Następnie przygotuj funkcję która będzie sprawdzać czy konkretne (np. firma) pole
zostało wypełnione zgodnie z teorią z którą się zapoznałeś we wstępie do elementów
2
formularza
można
odwoływać
się
w
następujący
sposób
form.elements["company"].value lub form.company.value
function validate( form ){
if (emptyCheck ( form.elements["company"].value ) ){
alert("Nie poprawne dane w polu FIRMA")
return false
}else {
return true
}
}
5. Plik z tak przygotowanymi funkcjami należy podlinkować do pliku z formularzem
umieszczając w nagłówku HTML kod:
<script type="text/javascript" src="jsValidator.js"></script>
6. Kod JS można również umieszczać bezpośrednio w tagach <script> np.:
<script type="text/javascript" >
function boo(){
return true
}
</script>
7. Następnie należy zdefiniować akcję wywołujący walidacje formularza, w tym celu w
elemencie o id=”sendButton”, dopisz wewnątrz tego elementu (zwróć uwagę ze
format onClick nie jest valid xhtml 1.1 należy stosować onclick):
onclick="return validate( this.form )"
8. Po wykowaniu w/w czynności sprawdź działanie formularza w przeglądarce. Po
próbie wysłania formularza powinno pojawić się okienko z komunikatem: „Nie
poprawne dane w polu FIRMA”
9. Sprawdź czy zostanie zwrócony błąd gdy wprowadzisz białe znaki.
10. Przygotuj funkcję która będzie sprawdzać pole pod kątem zastosowania białych
znaków, wykorzystaj w tym celu metodę indexOf()1 oraz charAt()2:
function whiteSpaceCheck( param ) {
var pat = "\t\n\r "
for ( i = 0; i < param.length; i++ ) {
var c = param.charAt( i )
if ( pat.indexOf( c ) == -1 )
return false
}
return true
}
1
2
http://www.w3schools.com/jsref/jsref_IndexOf.asp
http://www.w3schools.com/jsref/jsref_charAt.asp
3
11. Zmodyfikuj funkcję validate( form ) tak aby sprawdzane było pole z wykorzystaniem
nowej funkcji, wykonaj to samodzielnie i sprawdź czy walidacja działa poprawnie.
12. Przygotuj funkcję która będzie sprawdzać poprawność kodu miasta (format 00-000).
Wykonaj z wykorzystaniem wyrażenia regularnego (w tym celu wykorzystaj metody:
test()3 lub match()4 ).
Function zipCodeCheckByRegExp( param ){
var pat = /^[0-9]{2}-[0-9]{3}$/
if (pat.test(param.value) ){
return true;
}else{
return false;
}
}
13. Przetestuj działanie formularza, następnie zmodyfikuj go taka by weryfikacja kodu
pocztowego odbywała się po każdym wprowadzonym znaku, w tym celu dopisz w
elemencie:
onkeyp="zipCodeCheckByRegExp( this );
14. Za elementem input odpowiedzialnym za kod pocztowy umieść napis który będzie
informować o poprawności wprowadzonych danych:
<span id="zip_err"> </span>
15. Natomiast samą funkcję zipCodeCheckByRegExp() zmodyfikuj w następujący sposób:
function checkZIPCodeRegExp(param){
var pat = /^[0-9]{2}-[0-9]{3}$/
if ( pat.test(param.value) ){
document.getElementById("zip_err").innerHTML = "poprawny kod";
document.getElementById("zip_err").className = "zip_ok";
return true;
}else{
document.getElementById("zip_err").innerHTML = "niepoprawny kod";
document.getElementById("zip_err").className = "zip_bad";
return false;
}
}
16. Po przygotowaniu funkcji należy je odpowiednio wywołać w funkcji validate(form)
function validate( form ) {
if ( emptyCheck( form.elements["company"].value ) || whiteSpaceCheck( form.elements["company"].value ){
alert("Błędne dane firmy")
return false
}else{
zipCodeCheck( form.elements["zip"].value )
}
}
3
4
http://www.w3schools.com/jsref/jsref_regexp_test.asp
http://www.w3schools.com/jsref/jsref_match.asp
4
17. Następnie przygotuj funkcję sprawdzającą poprawność adresu e-mail i odpowiednio
dodaj do funkcji validate(form) wywołanie:
function emailCheckByRegExp( param ){
var pat = /[a-zA-Z_0-9\.]+@[a-zA-Z_0-9\.]+\.[a-zA-Z][a-zA-Z]+/
if (pat.test( param )){
return true;
}else{
alert("Niepoprawny adres e-mail");
return false
}
}
18. Dla wygody przygotuj funkcje weryfikująca string i zwracającą komunikat w
przypadku błędu, wykorzystać wcześniejsze funkcje:
function stringCheck( param, msg ) {
if (emptyCheck( param ) || whiteSpaceCheck( param ) ) {
alert( msg )
return false
}else{
return true
}
}
19. Zmodyfikuj funkcje validate(form) do sprawdzania nazwy firmy, ulicy, miasta i
wiadomości:
function validate(form){
return (
stringCheck( form.elements["company"].value, 'Błąd w polu FIRMA' ) &&
zipCodeCheckByRegExp ( form.elements["zip"]) &&
emailCheckByRegExp ( form.elements["emailAddress"].value ) &&
stringCheck ( form.elements["street "].value,'Błąd w polu ULICA’ ) &&
stringCheck ( form.elements["city"].value,'Błąd w polu MIASTO' ) &&
stringCheck ( form.elements["city"].value,'Brak wiadomości )
)
}
20. W celu poprawy prezentacji informacji o błędzie, zastąp wyskakujące okienko JS,
poprzez zmianę koloru etykiety pola które zostało błędnie wprowadzone w tym celu,
etykiety pól obligatoryjnych opatrz znacznikiem span z odpowiednim unikalnym np.
id=”company_err”:
<span id="company_err" >Firma</span>
21. Następnie stwórz nową klasę w jsValidator.js która będzie pobierać obiekt (nie tylko
jego wartość), sprawdzała jego poprawność, wyszukiwała odpowiednią etykietę i
zmieniała jej nazwę stylu (nie zapomnij o zdefiniowaniu wyglądu dla stylu „bad” oraz
„ok”).
function checkString_2( obj ){
var param = obj.value
5
var errFieldName = obj.name.substr(0) + "_err"
if ( emptyCheck ( param ) || whiteSpaceCheck ( param ) ){
document.getElementById( errFieldName ).className = "bad"
obj.focus()
return false
}
else {
document.getElementById( errFieldName ).className = "ok"
obj.focus()
return true
}
}
22. Zmodyfikuj również sprawdzanie e-mail i zipka by finalnie wyglądały tak:
function checkEmailRegExp(param){
var email = /[a-zA-Z_0-9\.]+@[a-zA-Z_0-9\.]+\.[a-zA-Z][a-zA-Z]+/
if (email.test(param)){
document.getElementById("email_err").innerHTML = "E-mail [poprawny])";
document.getElementById("email_err").className = "ok";
return true;
}else{
document.getElementById("email_err").innerHTML = "E-mail [błedny]";
document.getElementById("email_err").className = "bad";
return false;
}
}
function checkZIPCodeRegExp(param){
var pat = /^[0-9]{2}-[0-9]{3}$/
if (pat.test(param) ){
document.getElementById("zip_err").innerHTML = "Kod pocztowy";
document.getElementById("zip_err").className = "ok";
return true;
}else{
document.getElementById("zip_err").innerHTML = "Kod pocztowy [błedny]";
document.getElementById("zip_err").className = "bad";
return false;
}
}
23. Następnie zmodyfikuj funkcje validate(form) aby wyskakiwało ogólne okienko z
błędem a następnie podświetliły się etykiety:
function validate(form){
var check = true
if ( !( checkString_2(form.elements["company"]) ) ){
check = false;
}
if ( !( checkString_2(form.elements["street"]) ) ){
check = false;
}
if ( !( checkString_2(form.elements["city"]) ) ){
check = false;
}
if ( !( checkString_2(form.elements["message"]) ) ){
check = false;
}
if ( !( checkEmailRegExp(form.elements["email"].value) ) ){
check = false;
}
if ( !( checkZIPCodeRegpEx(form.elements["zip"] ) ) ){
6
check = false;
}
if (check == false){
alert ('Błąd w zaznaczonych polach');
return false
}
}
24. W następnym kroku zmodyfikuj formularz w taki sposób aby przycisk „wyślij” był
niewidoczny i pojawił się w momencie, gdy użytkownik wyrazi zgodę na
przetwarzanie danych osobowych, w tym celu umieść w nagłówku pliku z
formularzem następujący kod:
<script type="text/javascript">
function showElement( ele ){
document.getElementById(ele).style.visibility = 'visible';
}
function hideElement( ele ){
document.getElementById(ele).style.visibility = 'hidden';
}
</script>
25. Dodaj również w elemencie o id=”sendButton” kod:
style="visibility:hidden"
26. Nastepnie w radio buttonach wstaw odpowiednio:
onclick="showElement( 'sendButton' );
onclick="hideElement( 'sendButton' );
27. Przedstaw wyniki pracy prowadzącemu.
ZADANIE 2 (jQuery – do samodzielnego wykonania)
1. Zapoznaj się z biblioteką jQuery i wykorzystaj 2-3 (lub więcej) gotowych pluginów na
swojej stronie, którą przygotowałeś w ramach pierwszego samodzielnego zadania na
laboratoriach numer 1 w celu jej uatrakcyjnienia.
2. Opcjonalnie (dla chętnych): przygotuj kaskadowy arkusz styli dla formularza z
zadania 1 formatujący wygląd wszystkich jego elementów, sprawdź wygląd i
zachowanie formularza pod różnymi przeglądarkami, następnie z wykorzystaniem
JavaScript (w tym również biblioteki jQuery) wykonaj ujednolicenie wyglądu pod
wszystkimi przeglądarkami – udokumentuj swoją pracę.
7

Podobne dokumenty