פרק 22: האובייקט FORM
·
הקדמה
·
התכונות
·
המתודות
·
טיפול
באירועים
·
טופס
E-MAIL
·
תרגילים
הקדמה
מרכיבי
ה-FORM
במסמך ה-HTML, כפי
שוודאי שמת לב בדוגמאות השונות, מהווים מעין חוליה מקשרת בין פקודות ה-javaScript למרכיבי ה-GUI שנוצרו במסמך באמצעות תגיות HTML. כאשר מסמך מועלה אל הדפדפן נוצרים אובייקטים מסוג Form
אשר מייצגים את מרכיבי ה-Form שמופיעים במסמך ה-HTML. ה-references לאובייקטים מסוג FORM שנוצרים מוחזקים בתוך משתנים שמהווים תכונות באובייקט ה-document
אשר מייצג את המסמך. השמות של כל אחת מהתכונות האלה זהים בהתאמה לשמות שניתנו
למרכיבי ה-Form
במסמך ה-HTML
באמצעות התכונה NAME.
כפי
שניתן לראות בתרשים שמתאר את היררכית האובייקטים שנוצרת, מתחת לאובייקט ה-Form יכולים להיווצר אובייקטים מסוגים שונים
אשר מייצגים את מרכיבי ה-GUI השונים (כפתורים, שדות טקסט, כפתורי רדיו וכדומה..). אובייקטים
אלה, כאשר הם נוצרים – ה-references אליהם מוחזקים בתוך תכונות שקיימות באובייקט ה-Form.
כאשר
כותבים מסמך HTML
אשר כולל בתוכו גם פקודות ב-javaScript, ניתן לעשות שימוש במילה this מתוך מרכיבי ה-HTML שמייצגים את מרכיבי ה-GUI (כגון המרכיב INPUT אשר יכול לייצג שדה טקסט, כפתור וכו'). כך למשל, כאשר מוסיפים אל
תוך תגית ה-<INPUT> את
אחת התכונות אשר משמשות לקביעת הטיפול ב-event שנוצר (כגון onClick)
ניתן להשתמש במילה this כ-reference
למרכיב ה-GUI
ובדרך זו, למעשה, לשלוח אל הפונקציה שמפעילים reference לאובייקט שנוצר בדפדפן כדי לייצג את אותו מרכיב GUI
(המרכיב אשר נוצר באמצעות תגיות HTML). כך למשל, בדוגמא הבאה ניתן לראות כיצד מופעלת המתודה checkData
כדי לבדוק את הטקסט שהוכנס אל תוך שדה הטקסט כאשר מישהו משנה אותו (תגובה לאירוע change),
וכיצד נשלח אל המתודה reference לאוביקט שמייצג את שדה הטקסט. כמו כן, ניתן לראות כיצד בהגדרת
המתודה, נעשה שימוש ב-reference זה כדי לקבל את תוכנו של שדה הטקסט.
.
.
.
<INPUT TYPE="text" SIZE="40"
onChange="checkDate(this)">
.
.
.
<SCRIPT LANGUAGE="javaScript1.2">
function checkData(str)
{
if
(this.value<0 || this.value>0)
window.alert("This
is an Illegal value !");
}
</SCRIPT>
התכונות שקיימות באובייקט
בחלק
זה אסקור את התכונות שקיימות באובייקט FORM.
התכונה
action
תכונה
זו מכילה את הערך שניתן לתת לתכונה ACTION, אשר ניתן להוסיף אל תוך התגית <FORM>
במסמך ה-HTML.
הערך שתכונה זו מקבלת הוא ה-URL שאליו נשלחת האינפורמציה כאשר מדובר בטופס e-mail או
כאשר מדובר בטופס שנתוניו נשלחים לתכנית CGI שנמצאת בשרת לצורך עיבוד הנתונים.
תכונה
זו איננה read-only.
את הערך של תכונה זו ניתן לשנות על פי הצורך. בדרך זו, ניתן באמצעות פקודותscript מתאימות לשנות את ערכה של התכונה כך
שתכיל URL
אחר, וזאת בהתאם לפעולותיו של המשתמש.
תכונה זו נתמכת על ידי Netscape Nevigator
החל מגרסה 2, ועל ידי Internet Explorer החל מגרסה 3.
התכונה elements
תכונה
זו מהווה מערך אשר כולל בתור איבריו references לכל אחד מהאובייקטים אשר מייצגים את מרכיבי ה-GUI
השונים בטופס. תכונה זו נתמכת על ידי Netscape
Nevigator החל מגרסה 2, ועל
ידי Internet Explorer החל מגרסה 3.
התכונה
encoding
ערכה
של תכונה זו הוא מחרוזת תווים שערכה הוא הערך שמכילה התכונה ENCTYPE אשר ניתנת להוספה אל תוך התגית <FORM>.
התכונה נתמכת על ידי Netscape Nevigator החל מגרסה 2, ועל ידי Internet
Explorer החל מגרסה 3.
התכונה method
תכונה
זו מכילה את אחד משני הערכים המחרוזתיים הבאים: "GET" או
"POST". הערך שתכונה זו מכילה זהה לערכה של התכונה METHOD אשר ניתנת להוספה אל תוך התגית <FORM>.
תכונה זו נתמכת על ידי Netscape Nevigator החל מגרסה 2, ועל ידי Internet
Explorer החל מגרסה 3.
התכונה
name
תכונה
זו מכילה ערך מחרוזתי אשר זהה לערכה של התכונה NAME אשר הוספה אל התגית <FORM> במסמך ה-HTML. תכונה זו נתמכת על ידי Netscape
Nevigator החל מגרסה 2, ועל
ידי Internet Explorer החל מגרסה 3.
התכונה
target
תכונה
זו מכילה את ערכה של התכונה TARGET אשר ניתן להוסיף אל תוך התגית <FORM>
במסמך ה-HTML
כדי לציין את שם החלון שבו יופיע דף ה-HTML אשר מגיע בחזרה מהשרת (לא אחת מגיע מהשרת דף HTML
כתשובה לפניה שנעשתה). כך למשל קורה כאשר מפעילים מנוע חיפוש מתוך מסמך HTML
באמצעות יצירת טופס פניה למנוע החיפוש. הערך שיש לתת לתכונה זו הוא שמו של window או
של frame
אשר בו יוצג המסמך אשר הגיע בחזרה מהדפדפן. תכונה זו נתמכת על ידי Netscape Nevigator
החל מגרסה 2, ועל ידי Internet Explorer החל מגרסה 3.
המתודות
בחלק
זה ייסקרו המתודות אשר ניתן להפעיל על אובייקט ה-Form.
המתודה
handleEvent()
מתודה
זו נתמכת רק על ידי Netscape Nevigator החל מגרסה 4, והיא פועלת בדומה למתודה handleEvent() אשר ניתן להפעיל על האובייקטים window ו- document. מתודה זו איננה מחזירה אף ערך.
המתודה
reset()
באמצעות
הפעלת מתודה זו גורמים לכל מרכיבי ה-GUI שמופיעים בתוך ה-FORM לחזור למצבם ההתחלתי (למצבם ההתחלתי כפי שהיה כאשר המסמך נטען,
לראשונה, אל תוך הדפדפן). מתודה זו לא מקבלת אף ערך בעת הפעלתה, וגם לא מחזירה אף
ערך בחזרה. מתודה זו נתמכת על ידי Netscape
Nevigator החל מגרסה 3, ועל
ידי Internet Explorer החל מגרסה 4. הדוגמא הבאה מציגה הדגמה להפעלתה של מתודה זו.
<!-- file name : resetForm.html -->
<!-- 2000(c) Zindell Publishing House Ltd.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0//EN">
<HTML>
<HEAD>
<TITLE>resetForm.html</TITLE>
<SCRIPT LANGUAGE="javaScript1.2">
function clearForm(ob)
{
ob.reset();
}
</SCRIPT>
</HEAD>
<BODY>
<H1>Demo of the reset method</H1>
<HR>
<FORM>
<BR><LABEL>name:<INPUT TYPE="text"
SIZE="20" NAME="nameTf"></LABEL>
<BR><LABEL>age:<INPUT
TYPE="text" SIZE="4"
NAME="ageTf"></LABEL>
<BR><INPUT
TYPE="button" VALUE="PRESS TO CLEAR" onClick="clearForm(this.form)">
</FORM>
</BODY>
</HTML>
המתודה
submit()
פעולתה
של מתודה זו דומה לפעולה שמתרחשת כאשר המשתמש לוחץ על כפתור ה-"SUBMIT"
. כאשר מפעילים מתודה זו מתוך אובייקט מסוג
Form
גורמים לאינפורמציה, שנמצאת בתוך מרכיבי ה-GUI השונים ששייכים אליו, להישלח אל תכנית ה-CGI (או אל ה-e-mail המתאים) בהתאם לערכן של התכונות של אותו אובייקט Form
(כפי שהוספו אל תוך התגית<FORM> בעת יצירת הטופס במסמך ה-(HTML.
יש
להימנע מלהוסיף פקודות ב-javaScript אחרי הפעלתה בתוך מקטע פקודות ב-javaScript כיוון שזה עלול לגרום לביטול פעולתה של המתודה. מתודה זו נתמכת על
ידי Netscape Nevigator החל מגרסה 2, ועל ידי Internet
Explorer החל מגרסה 3.
טיפול באירועים
בחלק
זה ייסקרו התכונות אשר ניתן להוסיף אל תוך מרכיב ה-FORM כדי לטפל ב-events השונים שיכולים להיווצר באובייקט.
onReset
כאשר
לוחצים על כפתור RESET
כדי להחזיר את הטופס למצבו ההתחלתי נוצר האירוע Reset "חלקיק השניה" לפני שהטופס מוחזר למצבו ההתחלתי.
באמצעות הוספת תכונה onReset אל תוך התגית <FORM> ניתן לקבוע שפקודות מסוימות תתבצענה
כתגובה להיווצרות האירוע האמור. כך למשל, ניתן להיעזר באפשרות זו כדי להציג למשתמש
הודעה אשר תבקש את אישורו הסופי למחיקת הטופס. בדומה ל-event
handlers: onMouseOver ו-
onMouseOver גם
בשימוש ב-onReset יש
לקבוע את ערכה כך שהפקודה האחרונה שתתבצע תחזיר את הערך true כדי שפעולת החזרת מרכיבי הטופס למצבם ההתחלתי אכן תתבצע. בדרך זו
ניתן, למשל, לקבוע את ערכה של התכונה onReset כך שיהיה שווה להפעלה של המתודה confirm מתוך window, ובהתאם לערך שהיא תחזיר (true או false) לגרום להחזרת מרכיבי הטופס למצבם ההתחלתי. תכונה זו נתמכת על ידי
Netscape Nevigator החל מגרסה 3, ועל ידי Internet
Explorer החל מגרסה 4.
onSubmit
כאשר
לוחצים על כפתור SUBMIT
כדי לגרום לתוכנו של הטופס להישלח אל כתובת URL מסוימת נוצר האירוע Submit "חלקיק השניה" לפני שתוכנו של הטופס אכן נשלח. באמצעות
הוספת התכונה onSubmit אל
תוך התגית <FORM>
וקביעת ערכה כך שיהיה שווה לקבוצה של פקודות ב-javaScript ניתן לקבוע שהפקודות הללו תתבצענה לפני שתוכנו של הטופס יישלח.
בדרך זו ניתן לבצע בדיקה לנתונים שהוכנסו לשדות הטופס כדי לוודא את נכונותם לפני
שהטופס נשלח. יש לשים לב לכך
שהאירוע submit
נוצר אך ורק כתגובה ללחיצה על כפתור SUBMIT המקורי, והוא איננו נוצר כתגובה להפעלת המתודה submit()
אשר הוצגה לפני כן. ה-eventHandler: onSubmit
נתמך על ידי Netscape Nevigator החל מגרסה 3, וגם על ידי Inernet
Explorer החל מגרסה 4. בדומה
ל-onReset,
גם כאן, כדי שפעולת ה-submit תושלם יש לקבוע את ערכה של התכונה onSubmit כך שיהיה שווה לסדרה של פקודות ב-javaScript כשהפקודה האחרונה שמתבצעת מחזירה את הערך true . אם הפקודה האחרונה מבין הפקודות שהושמו אל תוך התכונה onSubmit לא
מחזירה את הערך true
וערכה גם לא שקול ל-true אז פעולת ה-submit (שליחת תוכנו של הטופס לתכנית CGI או ל-e-mail) לא תתבצע.
התכנית
הבאה מדגימה את אפשרות השימוש בתכונות onReset ו- onSubmit.
<!-- file name : onSubmitOnResetDemo.html
-->
<!-- 2000(c) Zindell Publishing House Ltd.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0//EN">
<HTML>
<HEAD>
<TITLE>onSubmitOnResetDemo.html</TITLE>
<SCRIPT LANGUAGE="javaScript1.2">
{
function isSubmitOk()
{
return
window.confirm("are you sure about sending this FORM ?");
}
function isResetOk()
{
return
window.confirm("are you sure about clearing this FORM ?");
}
}
</SCRIPT>
</HEAD>
<BODY>
<H1>Demo of the onSubmit and the onReset Event handlers</H1>
<HR>
<FORM name="myForm" onSubmit="return isSubmitOk()"
onReset="return isResetOk()" METHOD="POST"
ACTION="mailto:haim_michael@yahoo.com">
<BR><LABEL>name:<INPUT TYPE="text"
SIZE="20" NAME="nameTf"></LABEL>
<BR><LABEL>age:<INPUT
TYPE="text" SIZE="4"
NAME="ageTf"></LABEL>
<BR><LABEL>address:<INPUT
TYPE="text" SIZE="40"
NAME="address"></LABEL>
<HR>
<BR><INPUT
TYPE="RESET">
<BR><INPUT
TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
טופס E-MAIL
כפי
שכבר הוזכר קודם לכן, ניתן לייצור טופס (FORM) אשר תוכנו יישלח אל כתובת דואר אלקטרוני. כדי לעשות זאת יש
להוסיף אל תוך התגית <FORM> שלוש תכונות:
1.
יש
להוסיף את התכונה METHOD ולקבוע את ערכה כך שיהיה שווה ל-"POST".
2.
יש
להוסיף את התכונה ACTION
ולקבוע את ערכה כך שיהיה שווה לכתובת ה-URL של הדואר האלקטרוני שאליו יישלח תוכנו של הטופס. כדי לקבל את ה-URL של
כתובת הדואר האלקטרוני יש להוסיף לפניה את המחרוזת: "mailto:". בהמשכה של הכתובת ניתן להוסיף סימן שאלה כשאחריו מצוין הנושא
באמצעות המילה subject,
סימן שיוויון אחד אחריה ואחריו הנושא.
3.
התכונה
ENCTYPE
כשערכה הוא סוג ה-MIME של
הנתונים שנשלחים
כך,
לדוגמא, תיראה התגית <FORM>
כשהיא מציינת את תחילתו של טופס אשר נתוניו אמורים להישלח לכתובת הדואר האלקטרוני:
haim_Michael@yahoo.com:
<FORM NAME="entryData" METHOD="POST"
ACTION="mailto:haim_michael@yahoo.com?subject=scripts" ENCTYPE="text/plain">
תרגילים
1.
כתוב/כתבי
מסמך HTML
אשר כולל בתוכו טופס הזמנת פריטים מהסופרמרקט, וכפתור לחיץ אשר לחיצה עליו גורמת
לחישוב עלות הקניה. כל שורה בטופס תכלול את שם המוצר, את מחירו ושדה טקסט נוסף אשר
בו תוכנס הכמות המבוקשת. כל המסמך ייווצר באמצעות פקודות ב-javaScript אשר ייצרו, בנוסף, גם מערכים אשר יכילו את מחירי המוצרים השונים
ואת שמותיהם.
2000 © All the rights reserved to Haim Michael & Zindell
Publishing House Ltd.
No
parts of the contents of this paper may be reproduced or transmitted in any
form by any means
without
the written permission of the publisher !
This book can be used for personal use only !!!
Brought
to you by Zindell
(http://www.zindell.com)
לנוחיותך, להלן תוכן
העניינים של הספר: