עיצוב טפסים הוא משימה מורכבת. אפילו בטופס שכל מטרתו היא איסוף הפרטים האישיים של המבקר באתר, יש שפע של החלטות עיצוביות שצריך לקחת. אפשר להעביר קורס שלם בנושא, וסדרת הפוסטים הזו נוגעת בו רק באופן חלקי. אני ממליץ בחום להציץ ברשימת הקריאה בסוף הפוסט הזה, ולקרוא לפחות חלק מהקישורים.
קישורים לכל הפוסטים בסדרה:
חלק ראשון: זרימה בטופס ויישור תוויות.
חלק שני: עזרה והסברים, ובדיקות תקינוּת (וָלידציות).
חלק שלישי: פעולה ראשית ופעולות משניות, ומספר השדות בטופס.
חלק רביעי (הפוסט הזה): תלויות בין שדות, ורשימת קריאה מומלצת.
עדכון אחרון: 25/3/2010, תודה לאופיר ושגיא על ההערות.
תלויות בין שדות
ישנו מגוון רחב של תלויות אפשריות בין שדות בטופס, אבל אפשר לחלק אותן בגדול לשלושה סוגים:
- שינוי בשדה אחד גורם לשינוי הערכים האפשריים בשדה אחר בטופס, ולעתים גם בערך שנבחר בשדה האחר. למשל, בחירת "ישראל" בשדה "ארץ" בכתובת למשלוח, תגרום לרשימה שבשדה "סוג משלוח" להתעדכן (דואר רשום, דואר שליחים או איסוף בחנות). בחירת "ארה"ב" תעדכן את אותה רשימה שוב (דואר רשום או שילוח בינלאומי). אם "ישראל" ו"דואר שליחים" נבחרו, בחירת "ארה"ב" ב"מדינה" תשנה אוטומאטית את הבחירה של "סוג משלוח" ל"דואר רשום" – כי "דואר שליחים" לא אפשרי במשלוח לארה"ב.
- שינוי בשדה אחד גורם להופעה/הסתרה (show/hide) או איפשור/נטרול (enable/disable) של שדות או כפתורים אחרים בטופס. למשל, בחירת "איסוף בחנות" באותו שדה "סוג משלוח", תנטרל או תעלים את כל שדות הכתובת למשלוח – הם אינם נחוצים במקרה זה.
- שילוב של 1 ו-2. למשל, בחירת "ארה"ב" בכתובת למשלוח, תגרום לאיפשור של השדה "מדינה", ותמלא ברשימת הערכים האפשריים את המדינות של ארה"ב. בחירת "אוסטרליה" תשנה את רשימת הערכים ב"מדינה" למדינות של אוסטרליה. בחירת "ישראל" תנקה את רשימת הערכים האפשריים ב"מדינה", ותנטרל את השדה.
תלויות בין שדות טומנות בחובן סכנות שמאיימות על הצלחת הממשק, אותן אפרט למטה.
הסכנות לממשק רלוונטיות בעיקר בטפסים שמשמשים לעריכה של מידע קיים. גם בטפסים להזנת של מידע חדש, בהם שינוי בשדות משפיע על השדות שמעליהם (כאלה שכבר הוזן בהם מידע), תלויות עשויות לסכן את הממשק. כשההשפעה היא רק על שדות שטרם הוזן בהם מידע, הסיכון פחות גדול. רוב הסיכויים שהמשתמש עוד לא ראה את השדות שבהמשך, ושינויים בהם לא יפריעו לו. יוצא דופן בהקשר הזה הוא כפתור הפעולה הראשית ("שלח", "עדכן" וכו'). כשמנטרלים אותו, בגלל ערכים שגויים בטופס למשל, המשתמש עשוי ללכת לאיבוד – הוא לא יבין למה הוא לא יכול לסיים עם הטופס ולהמשיך הלאה.
שינויים אוטומטיים שהמשתמש לא מודע אליהם
שינויים אוטומטיים קשורים בתלות מהסוג הראשון. שינויים כאלה הופכים להיות מסוכנים כשהשדות התלויים לא נמצאים בסמוך אחד לשני, או כשהקשר בין השדות התלויים לא ברור מאליו. הכוונה לטפסים שיש בהם "חוקים עסקיים" (business logic או business rules), שגם אם הם משוקפים נכון בהתנהגות של הטופס, לא יהיו ברורים למשתמש מזדמן.

קרם ברולה. מממממ
הנה דוגמא ל"חוקים עסקיים" כאלה. תארו לכם מערכת של קוּפָּה בבית קפה. בבית הקפה יש מנות שלא ניתן לארוז ולקחת ב-takeaway, למשל קרם ברוּלֶה שחייבים לאכול במקום. זהו "חוק עסקי": אם מזמינים קרם ברולה, אי אפשר לארוז את ההזמנה. בתחילת ההזמנה הקופאי מזין את השדה "סוג הזמנה": "לאכול במקום", או "לקחת". סוג ההזמנה ממשיך להופיע בראש הטופס לכל אורך תהליך ההזמנה. הלקוח מזמין סנדוויץ', קפה, עוגה ובסוף – קרם ברולה. כשהקופאי מזין "קרם ברולה", סוג ההזמנה משתנה אוטומטית ל"לאכול במקום", כמימוש של ה"חוק העסקי" שהזכרנו קודם. קופאי חדש לא ישים לב, לא יֵדע לעצור את ההזמנה, ולהגיד ללקוח שאי-אפשר לארוז אותה ל-takeaway. ההזמנה לא תצא כ-takeaway והלקוח יבזבז זמן יקר בהמתנה לאריזה של הסנדוויץ', הקפה והעוגה, ויאלץ לאכול את הברולה במקום (המסכן).
אז מה עושים? כדי להתמודד עם בעיות מהסוג הזה, יש כמה דרכים מוּכּרות:
- לא לבצע שינויים אוטומטיים. למשל, במקרה שתארנו כאן אפשר היה בסוף ההזמנה, לפני התשלום, להציג לקופאי הודעה:
לא ניתן לקחת את ההזמנה, כי יש בה פריטים שלא ניתן לקחת: קרם ברולה. לפצל לשתי הזמנות?
פיצול לשתי הזמנות מסרבל את התהליך של הקופאי. אם זה מקרה שימוש נפוץ במערכת, היה עדיף לאפשר לציין עבור כל פריט בנפרד האם הוא למשלוח או לא. - להודיע למשתמש שיש בעיה, ולבקש ממנו להחליט מה לעשות.
לא ניתן לקחת קרם ברולה. לשנות את סוג ההזמנה ל"לאכול במקום"?
החסרון בהודעה כזאת הוא שהוא דורש מהמשתמש להחליט. אם אחת האפשרויות תהיה נפוצה יותר באופן משמעותי, עדיף לפעול על-פי מה שמוגדר בסעיף 3. - לבצע שינוי אוטומטי, ולהודיע למשתמש על השינוי שבוצע. מיד אחרי שהקופאי הזין "קרם ברולה", היה אפשר להציג לו הודעה:
לא ניתן לקחת קרם ברולה. סוג ההזמנה השתנה ל"לאכול במקום".
או לחילופין:
לא ניתן לקחת קרם ברולה. המנה לא התווספה להזמנה.
החסרון (והיתרון) בשתי האפשרויות האלה הוא שבשתיהן אנחנו בוחרים אוטומאטית עבור המשתמש את מה ששאלנו אותו באפשרות הקודמת. חסרון – כי אנחנו לא מאפשרים לו לבחור, אלא מציבים בפניו עובדות. יתרון – כי אנחנו חוסכים ממנו את ההחלטה. במקומות שבהם יש נטיה ברורה לאחת האפשרויות, עדיף לבחור עבור המשתמש את האפשרות הנפוצה ולתת לו לשנות את הבחירה האוטומאטית בצורה ידנית בעת הצורך.
במקרה הזה אני נוטה להניח שהמוטיבציה לקחת את ההזמנה (ולא לאכול במקום) היא חזקה מהמוטיבציה להזמין דווקא קרם ברולה, כך שעדיף להציג את ההודעה השניה – המנה לא התווספה. - לשנות את סדר השדות, כך שהשדות המושפעים יהיו בסוף הטופס. היה אפשר להעביר את השדה "סוג הזמנה" לסוף, ואז הקופאי היה מגלה בסוף ההזמנה שהערך "לקחת" לא אפשרי. כדי להקל עליו, היה אפשר לרשום הערה בולטת בחשבון ליד "קרם ברולה", שמסבירה שאי-אפשר לארוז אותו למשלוח. כשהקופאי היה מוסיף את הברולה לחשבון, היה רואה מייד את ההערה ולא היה צריך לשאול למה אי אפשר לארוז את ההזמנה.
בעיני אפשרות 3 היא העדיפה, כי היא נותנת לקופאי משוב מיידי על הפעולה שלו, ומאפשרת לו להעביר מייד את אותו המשוב ללקוח שעומד מולו.
הצגה/הסתרה של חלקים מהטופס
הצגה והסתרה של חלקים מהטופס משרתות מטרה חשובה. הן מסייעות לשמור על הטופס תמציתי וממוקד, מציגים רק את מה שהמשתמש צריך להזין. אך הסתרה של חלקים מהטופס עשוייה ליצור דיסאוריינטציה – בלבול. המשתמש שראה טופס שבנוי בצורה מסויימת, רואה לפתע טופס שבנוי אחרת.
תארו לעצמכם ממשק כזה, בדף ההזמנה של אתר דמיוני למכירת מוצרי תוכנה:
עבור האפשרות השניה והשלישית נחוצים פרטים נוספים – לצורך העניין, נניח שלשליח נחוצה כתובת פיזית, ולהורדה מהאתר כתובת אימייל. איפה נציג את הפרטים הנוספים הדרושים? אפשרות אחת היא בתוך הטופס:
כשבוחרים "הורדה מהאתר", השדות מתחת ל"שליח" נעלמים, ונוסף שדה "אימייל" מתחת ל"הורדה מהאתר":
עד כאן זה די ברור, פחות או יותר. עכשיו תדמיינו שלחצתם על "שליח", אבל התכוונתם בעצם ללחוץ על "הורדה מהאתר". כמה זמן ייקח לכם למצוא את "הורדה מהאתר" במקומו החדש? כמה זמן היה לוקח לכם לעשות את זה אם היו תחת שליח 10 שדות ולא 5 כפי שמוצגים כאן? ומה אם היו 6 אפשרויות לסוג משלוח, ולא רק 3?
אחד העקרונות החשובים בממשק משתמש הוא עקביות. כשאנחנו מסתירים חלקים מהממשק או משנים את מקומם, אנחנו פוגעים בעקרון הזה. זה לא אומר שאי-אפשר להסתיר חלקים מהממשק, אלא רק שצריך להגן על המשתמש מבלבול כשאנחנו עושים את זה.
פתרון אפשרי אחד, הוא להציג את השדות המשתנים מתחת לטופס:
מאחר והמשתמש ממלא את הטופס לפי הסדר, הוא לא יוטרד מהעלמותם של חלק מהשדות אם עוד לא מילא אותם.
פתרון אחר הוא לבקש את הפרטים הנוספים מהמשתמש בטופס נפרד, בחלק אחר של התהליך. פתרון זה מסרבל את תהליך העבודה של המשתמש, ולכן רצוי להשתמש בו רק כשאין ברירה אחרת.
ניטרול הפעולה הראשית וחלקים מהטופס
"חוקים עסקיים" כמו בדוגמא של בית הקפה עשויים להשפיע לא רק על ערכים בשדות, אלא גם על הזמינות של הפעולה הראשית בטופס, או חלקים בתוך הטופס. למשל, תארו לעצמכם שבאותה מערכת של בית הקפה, יש שתי פעולות ראשיות (כפתורים): "לאכול כאן" ו"לקחת", שמופיעים בסוף טופס ההזמנה בקופה. אם נבחר פריט שאי אפשר לקחת, כמו קרם ברולה, הכפתור "לקחת" ינוטרל אוטומטית. לכאורה, ניטרול הכפתור "לקחת" מבטא בצורה נכונה את החוק העסקי. אבל כמו בעדכון האוטומטי של ערכי השדות שהצגתי למעלה, המשתמש לא בהכרח יבין את הקשר בין הבחירה בקרם ברולה לניטרול הכפתור.
אפשר לחשוב על שני פתרונות פשוטים לבעיה:
- לא לנטרל את הכפתור. כשהקופאי ינסה ללחוץ על "לקחת", תופיע הודעה שמסבירה את העניין עם קרם הברולה.
- לבטא בבירור את החוק העסקי כחלק מהטופס. למשל, להציג ליד כל פריט האם אפשר לקחת אותו ב-takeaway או לא.
נראה ששילוב של 1 ו-2 ייתן פתרון מלא לבעיה. לא תמיד ניתן לבטא את החוק העסקי כחלק מהטופס, בעיקר כשהחוק מורכב מאוד, או שיש חוקים רבים. במקרים אלה חשוב במיוחד לא לנטרל את כפתור הפעולה הראשית, כדי לאפשר למשתמש ללמוד מה אפשר לעשות בעזרת המערכת ומה לא.
ניטרול של חלקים מטופס עשוי להיות פתרון לבעיית הדיסאוריינטציה שהסתרה שלהם תיצור (כפי שהצגתי בכותרת הקודמת). בספריית העיצוב של blink מציגים בקצרה את ההתלבטות בין הסתרה לניטרול. גם כאן, חשוב לאפשר למשתמש להבין מה מנטרל את מה. כדי לעזור למשתמש להבין, רצוי להצמיד את השדה המנטרל לשדה המנוטרל, ולא לנטרל שדות שלא צמודים אליו. כשהניטרול האוטומטי קורה קרוב, המשתמש יכול לראות את הניטרול במבט אחד יחד עם הבחירה שגורמת לניטרול. כשהשדות המנוטרלים רחוקים המשתמש יפספס את הניטרול, וכשיגיע לשדה המנוטרל לא יבין למה אי אפשר להזין בו מידע.
כמו בכל פתרון אחר שמוצג פה, גם כאן חשוב להפעיל שיקול דעת ולחשוב על הסיטואציה הספציפית שמטפלים בה, מי קהל היעד של המערכת ומה הסביבה שהוא עובד בה. האם המשתמש מזדמן או קבוע? סביבת העבודה מאפשרת לו להתרכז במערכת שלנו, או שהיא מושכת את תשומת הלב שלו החוצה? וכן הלאה.
עוד על טפסים: רשימת קריאה מומלצת
הנושא של טפסים, כפי שראיתם בפוסט הזה ובאלה שקדמו לו, הוא מורכב ועשיר מאוד. יש נושאים שלמים שלא כיסיתי כאן, וגם בנושאים שכיסיתי, היה אפשר לרדת הרבה יותר לעומק. כדי לכסות את הנושא באופן מלא, נחוץ קורס או ספר שלם. המלצתי בפוסטים הקודמים על כמה קישורים ללימוד על טפסים, ואני מביא אותם כאן שוב במרוכז, ועוד כמה אחרים:
- Luke Wroblewski הוא מקור עשיר לידע בנושא. יש לו בלוג מעניין, ספר שיצא לא מזמן – Web Form Design: Filling in the Blanks ושפע של מצגות (למשל: Best Practices for Form Design) והרצאות (הנה אחת מצויינת, שעה ורבע של צפיה שבהחלט משתלמת).
- ב-Smashing Magazine יש מדי פעם סיקורים בנושא, הנה אחד מצויין על טפסי הרשמה לאתר.
- ב-A List Apart יש הרבה כתבות מצויינות, הנה אחת עם טיפים לעיצוב טפסים (תודה למרטין על הקישור).
- ה-Blink Design Library מכיל הרבה מידע על עיצוב ממשק בכלל, וגם על טפסים.
- כתיבת הודעות שגיאה היא נושא לפוסט בפני עצמו (יום אחד זה יקרה), עד אז, הנה ההמלצות של נילסן לכתיבת הודעות שגיאה.
- יש כמה אתרים עם מחוללי טפסים, אם אתם בעניין של להציג סקיצה מהירה ועובדת של טופס. אני נתקלתי ב-Wufoo וגם ב-JotForm (תודה לארז מקפה דה מרקר), אבל יש בטח עוד הרבה אחרים.
אתם מוזמנים ומוזמנות להוסיף כאן בתגובות עוד קישורים שימושיים שמצאתם בנושא, אני משוכנע שיש רבים שיישמחו לראות.
לכל הפוסטים בסידרה
חלק ראשון: זרימה בטופס ויישור תוויות.
חלק שני: עזרה והסברים, ובדיקות תקינוּת (וָלידציות).
חלק שלישי: פעולה ראשית ופעולות משניות, ומספר השדות בטופס.
חלק רביעי (הפוסט הזה): תלויות בין שדות, ורשימת קריאה מומלצת.
לגבי החלק "שינויים אוטומטיים שהמשתמש לא מודע אליהם"
נראה לי יותר הגיוני במקום לעשות שינוי אוטומטי ולהודיע למשתמש – לשאול את המשתמש מה הוא מעדיף (ביחוד אם זה קופאי שיצטרך בכל מקרה ליידע את הלקוח ולשאול אותו מה הוא מעדיף):
לא ניתן לקחת קרם ברולה ב- takeaway. מה ברצונך לעשות:
– לאכול במקום
– להוריד את המנה מההזמנה
אהלן אופיר,
ההצעה שלך היא מצויינת במקרה הזה, והיא יותר טובה מההצעות שהצגתי. יחד עם זה, רצוי להיות מודע לכך שלשאול את המשתמש מה הוא רוצה לעשות, בכל פעם שנתקלים בשאלה, עשוי להפריע לו. שאלה מאלצת אותו לעצור את התהליך שלו ולענות. היה חשוב לי דווקא לתאר איך לבצע שינויים אוטומטיים בצורה שתאפשר למשתמש להתמודד איתם.
במערכות מורכבות יותר, מנסים הרבה פעמים בתהליך העיצוב להבין בנקודות כאלה, מה תהיה התגובה הנפוצה ביותר של משתמשים, ולוקחים אותה בתור ברירת המחדל – בשינוי אוטומטי. בצורה כזו חוסכים מהמשתמש את ההתלבטות שוגזלת ממנו זמן ומשאבים קוגניטיביים. יחד עם ההחלטה האוטומטית, חשוב להקפיד ליידע את המשתמש ולהשאיר את השליטה בידיו.
אם כן, אפשר ורצוי להוסיף לרשימת האפשרויות שהצגתי, את האפשרות שהצעת:
4. לשאול את המשתמש.
תודה!
שכחת לכתוב על החלק (המעצבן) שמסיים טפסים רבים – הקאפצ'ה.
שימושיות היא קריטית אצלה.
חתול,
זה נכון, ויש הרבה מה לכתוב עוד על טפסים, אשתדל לחזור אל הנושא בהמשך.
רק עכשיו ראיתי את זה.. ואני מגיב פה מאוחר.. מאד מאד מאוחר.. אבל לדעתי יש כמה בעיות במה שתיארת לעיל בתור הפתרונות הרצויים.
זה נכון שהמצב העדיף הוא לא לבצע שינויים אוטומטיים בכלל.. אבל לדעתי המצב שבא אחריו מבחינת סדר העדיפות – הוא לבצע שינויים בשדות הבאים בבחינת מה ניתן לבחור, ולעולם לעולם לעולם לעולם לא לשנות בחירה שכבר נעשתה. לדעתי זה פשע שאין לא מחילה.
גם אם אתה מודיע על זה (כי רוב הסיכויים הם שהמשתמש לא יקרא את ההודעה, ואם יקרא לא יבין, ואם יבין לא יבין את ההשלכות ואם יבין את ההשלכות לא יפנים, ואם יפנים לא יפעל כדי למנוע את הקטסטרופה, ואם יפעל – לא יפעל נכון.)
בדוגמת בית הקפה שלך -מצב 2 אינו פתרון טוב כלל וכלל. הפתרון הסביר (אם חייבים להכיל את הכלל העסקי בטופס) הוא להדיע בעת בחירה של "משלוח" כי "לתשומת לבך: יש פריטים מסוימים שלא יוכלו להכלל בהזמנת משלוח"). לא להעלים את קרם הברולה מהרשימה לבחירה כמובן (כדי שהקופאי לא יחפש אותו שעות לשווא) אך להאפיר אותו (ולהעיר ליד שאי אפשר לבחור אותו בגלל שאתה במצב משלוח")
לשנות אוטומטי מצב מהותי (סוג ההזמנה), שכולל בתוכו הערכות שונה במטבח, אריזה וכו'.. הוא לדעתי פתרון רע.
היי שגיא, תודה על ההערה. עדכנתי את הטקסט למעלה וגם הוספתי תודה לך ולאופיר בראש הפוסט.
אני מסכים איתך ששינוי אוטומאטי (בלי ליידע את המשתמש) הוא דבר רע מאוד. אבל גם לשאול את המשתמש על כל צעד ושעל מה הוא רוצה לעשות זה לא פתרון מוצלח. מערכת שמעוצבת טוב שואלת את המשתמש רק השאלות שהוא באמת היה חייב לענות עליהן, ומחליטה לבדה מה נכון בכל השאר, כמובן תוך יידוע המשתמש בצורה סבירה.
אם מיידעים את המשתמש בצורה בולטת וברורה, במקום נכון מבחינת הקשר ובטקסט קצר – זה עובד מצויין. אם זה מלווה עם משוב בצליל זה בכלל מעולה. תחשוב על ההודעה "לא ניתן לקחת קרם ברולה. המנה לא התווספה להזמנה." שמופיעה בצמוד למקום שבו הקופאי לחץ על מסך המגע כדי להוסיף קרם ברולה, ומלווה בצליל קצר שמציין שגיאה. האם זה לא עדיף על לשאול אותו מה הוא רוצה לעשות?
לגבי ההצעה שלך, "להודיע בעת בחירה של "משלוח" כי "לתשומת לבך: יש פריטים מסוימים שלא יוכלו להכלל בהזמנת משלוח"", זה ממש לא יעזור, מאותו נימוק שאתה עצמך הזכרת: "רוב הסיכויים הם שהמשתמש לא יקרא את ההודעה, ואם יקרא לא יבין…" (וכו'). מאחר ובמקרה שתארתי כאן בחירת המשלוח היא בתחילת התהליך, העובדה שיש פריטים שאולי יתווספו להזמנה בהמשך ולא ניתן להזמין למשלוח היא לא רלוונטית לשלב הזה של ההזמנה. הודעה כזו רק תפריע למשתמש.
לעניין הערתך "לשנות אוטומטי מצב מהותי (סוג ההזמנה), שכולל בתוכו הערכות שונה במטבח, אריזה וכו'.." – אני מסכים, טעיתי בטקסט המקורי, ולכן גם תיקנתי את הטקסט בהתאם. הסיבה שאני רואה לנגד עיני היא לא ההערכות במטבח, כפי כתבת, כי היא בד"כ לא מתחילה לפני שהלקוח משלם, לפחות בבתי קפה בסגנון "ארקפה", "ארומה" וכו' שאני כיוונתי אליהם. הסיבה היא, כפי שכתבתי בטקסט המועדכן בפוסט, שלהערכתי המוטיבציה לקחת את ההזמנה ב-takeaway חזקה מבחירה של מנה כזו או אחרת.
היי ברק.
ראיתי את התיקון :)
אני עדיין חושב שמספר 3 צריך להיות אחרון.
אם שמתי "V" בתיבת בחירה, צריך לקרות משהו מאד מאד (מאד !) קיצוני כדי שמחשב יעיף לי אותה משם אוטומטית.
מחשב הוא רובוט, ואני אלוהים עבורו. מחשב שמשנה החלטה מודעת של משתמש (לא מדובר במשהו שהמשתמש לא החליט עבורו עקב ברירת מחדל, או משהו שהמערכת כלל לא מאפשרת למשתמש להחליט בעניינו, אלא בשינוי החלטה מודעת של המשתמש) נוגד את החוק השני של הרובוטיקה:
http://he.wikipedia.org/wiki/%D7%A9%D7%9C%D7%95%D7%A9%D7%AA_%D7%97%D7%95%D7%A7%D7%99_%D7%94%D7%A8%D7%95%D7%91%D7%95%D7%98%D7%99%D7%A7%D7%94
יוצא מכלל זה כמובן, אם המחשב נותן למשתמש עצמו לבצע החלטה ברמה גבוהה יותר שמבטלת החלטה נמוכה (דוגמא: שימוש
ב – Pre defined setttings , שיש להם סט החלטות, ומשתמש שמחליף אחד כזה בשני, יכול לגרום לשינוי כל השדות בטופס מסוים, אפילו לאחר שקבע אותם בעצמו), אבל לתת להחלטה ברמה נמוכה ("קרם ברולה" ) להחליף החלטה כללית של סוג המשלוח, לדעתי זה מעשה שלא ייעשה.
ֿ
לכן :
לא ניתן לקחת קרם ברולה. המנה לא התווספה להזמנה.ֿ – זה מקובל
אבל:
לא ניתן לקחת קרם ברולה. סוג ההזמנה השתנה ל"לאכול במקום". – זה לא מקובל אלא אם כן מדובר בסיבה טובה מאד (מאד מאד !!) לעשותה
פסח שמח
:))
:)
ברק,
פוסט מעולה ביותר ומחכים!
מצפה לבאות
אני צריכה ליצור הודעת שגיאה בצורה כזו:
מגיעה רשימה של השגיאות וכל שגיאה היא מעין קישור למקום המתאים (תיבת טקסט שלא תואמת ולידציה).
ראיתי את זה בכמה אתרים ואין לי מושג איך ליישם.
מישהו יודע?
הי,
אשמח לקרוא את כל הסדרה בנושא הטפסים…אך לצערי הלינקים לא עובדים…,
תוכחו לשלוח לי בבקשה?
קרן, כל הקישורים למעלה עובדים בצורה מצוינת, את מוזמנת להקליק ולקרוא את כל הסדרה.