שאלה אחרת לגבי userData אני מנסה להשתמש ב-userData כמו פה ובתפוז כדי לגרום להודעות בפורום שהמשתמש ביקר בהן לשנות צבע, אני רוצה שלפני שהפורום נבנה בצורה דינאמית ע"י לולאות של JS בצד לקוח לבדוק זאת אבל בגלל שJS פועל לפני כל שאר ה-HTML הוא לא מוצא את userData ומודיע לי על שגיאה – מה אני יכול לעשות גדי שזה לא יקרה?
כשאתה מציג את ההודעות בלולאת JS באופן דינמי, פשוט כאשר כשאתה עובר על כל הודעה אז גם תעבור על בדיקת ההודעה. במידה והיא נלחצה (לפי ערך ה-userData) או לא ותפעל בהתאם.
אני קראתי שוב ושוב ושוב את המדריך של userData ואני ממש בטוח שה-div של ה-userData חייב לעלות לפני ששאר הקוד עולה אבל בגלל שזה לא ככה אז הקוד הבא לא פועל (סתם משהו שאני מנסה) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html> <head> <title>Page title</title> </head> <style> .userData {behavior:url(#default#userdata);} </style> <script language="JavaScript" type="text/javascript"> <!– var ud=document.getElementById("ud"); ud.load("forumMsg"); var msgArr = ud.getAttribute("msgArr"); msgArr = split(","); for (i=0;i<10;i++){ for (j=0;j<msgArr.length;j++){ if (parseInt(msgArr[i]==j)){ bWasRead=true; } } if (bWasRead){ document.write("<div id="+i+" style="color:#EAEAEA;">"+i+"</div>"); bWasRead=false; } else{ document.write("<div id="+i+" style="color:#000000;">"+i+"</div>"); } } //–> </script> <body> <div id="ud" class="userData"></div> </body> </html>
אתה מכניס את כל ID ההודעות לתוך userData? אתה צריך ליצור ערך ב-userData עם שם של ערך קבוע ו-ID ההודעה שעליה לוחצים בפורום. ככה תוכל לבצע את הבדיקה אחרי שה-DIV מודפס.
try…catch….finally – זו שיטה לטיפול ב run time exceptions – כלומר השיטה של JS לטפל בשגיאות. את הקוד הבעייתי אתה שם בתוך בלוק של try, ואחריו אתה משתמש בבלוק של catch בשביל לטפל בשגיאה אם קרתה. בלוק finally יתבצע בין אם קרתה שגיאה ובין אם לא.
למה רק run time exceptions? יש חלוקה בין שגיאות שנובעות מקוד לא תקין (בשפות שלא עוברות קומפילציה זה כמובן הרבה יותר גרוע, כי קוד לא תקין מגלים רק כשמנסים להריץ ולא בזמן קימפול) לבין שגיאות שלכאורה למתכנת אין שליטה עליהן (קלט שגוי, נתונים שגויים ב DB, חיבור אינטרנט שמתנתק באמצע פעולה, וכד'). האחרונים נקראים run time exceptions, ובהם אפשר לטפל בד"כ במספר דרכים – את הקלט מהמשתמש, לדוגמא, אפשר לסנן ולבדוק (בדיקות תקינות לטופס). במקרים שבהם לא ניתן לטפל מראש ב run time, משתמשים ב try-catch בשביל לא לאפשר מצב של קריסה מוחלטת של התוכנית.
אוקיי אני חייב להסביר את עצמי טוב.. ככה יש לי עמוד של הודעות… אני משתמש ב-userData בשביל למצוא את ההודעות שכבר נלחצו! אני אחרי שה-userData הופך את הפורום ל-נלחץ | לא נלחץ אחרי שאני מעלה את הפורום… אני חשבתי איך אני אעשה את זה בצורה יעילה וגם שלא תפגע בקוד… אז חבר שלי הציע להשתמש ב-OOP ואני משתמש בזה
13 תשובות
הסתדרתי
שאלה אחרת לגבי userData
אני מנסה להשתמש ב-userData כמו פה ובתפוז כדי לגרום להודעות בפורום שהמשתמש ביקר בהן לשנות צבע, אני רוצה שלפני שהפורום נבנה בצורה דינאמית ע"י לולאות של JS בצד לקוח לבדוק זאת אבל בגלל שJS פועל לפני כל שאר ה-HTML הוא לא מוצא את userData ומודיע לי על שגיאה – מה אני יכול לעשות גדי שזה לא יקרה?
למה לא לקרוא
לבדיקה עבור כל הודעה בעת הלולאת JS?
יש לך קוד קיים?
אני לא כל כך מבין…
כשאתה מציג
את ההודעות בלולאת JS באופן דינמי, פשוט כאשר כשאתה עובר על כל הודעה אז גם תעבור על בדיקת ההודעה. במידה והיא נלחצה (לפי ערך ה-userData) או לא ותפעל בהתאם.
אני קראתי שוב ושוב ושוב את המדריך
של userData ואני ממש בטוח שה-div של ה-userData חייב לעלות לפני ששאר הקוד עולה אבל בגלל שזה לא ככה אז הקוד הבא לא פועל (סתם משהו שאני מנסה)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Page title</title>
</head>
<style>
.userData {behavior:url(#default#userdata);}
</style>
<script language="JavaScript" type="text/javascript">
<!–
var ud=document.getElementById("ud");
ud.load("forumMsg");
var msgArr = ud.getAttribute("msgArr");
msgArr = split(",");
for (i=0;i<10;i++){
for (j=0;j<msgArr.length;j++){
if (parseInt(msgArr[i]==j)){
bWasRead=true;
}
}
if (bWasRead){
document.write("<div id="+i+" style="color:#EAEAEA;">"+i+"</div>");
bWasRead=false;
}
else{
document.write("<div id="+i+" style="color:#000000;">"+i+"</div>");
}
}
//–>
</script>
<body>
<div id="ud" class="userData"></div>
</body>
</html>
אתה מכניס
את כל ID ההודעות לתוך userData?
אתה צריך ליצור ערך ב-userData עם שם של ערך קבוע ו-ID ההודעה שעליה לוחצים בפורום.
ככה תוכל לבצע את הבדיקה אחרי שה-DIV מודפס.
לא…
אני מכניס את כל ה-Id של ההודעה שנלחצה!
ועוד שאלה מה זה הפקודה try ?
קרא במדור JS (במאמרים)
try…catch….finally – זו שיטה
לטיפול ב run time exceptions – כלומר השיטה של JS לטפל בשגיאות.
את הקוד הבעייתי אתה שם בתוך בלוק של try, ואחריו אתה משתמש בבלוק של catch בשביל לטפל בשגיאה אם קרתה. בלוק finally יתבצע בין אם קרתה שגיאה ובין אם לא.
למה רק run time exceptions? יש חלוקה בין שגיאות שנובעות מקוד לא תקין (בשפות שלא עוברות קומפילציה זה כמובן הרבה יותר גרוע, כי קוד לא תקין מגלים רק כשמנסים להריץ ולא בזמן קימפול) לבין שגיאות שלכאורה למתכנת אין שליטה עליהן (קלט שגוי, נתונים שגויים ב DB, חיבור אינטרנט שמתנתק באמצע פעולה, וכד'). האחרונים נקראים run time exceptions, ובהם אפשר לטפל בד"כ במספר דרכים – את הקלט מהמשתמש, לדוגמא, אפשר לסנן ולבדוק (בדיקות תקינות לטופס). במקרים שבהם לא ניתן לטפל מראש ב run time, משתמשים ב try-catch בשביל לא לאפשר מצב של קריסה מוחלטת של התוכנית.
אז בעצם
אין לך צורך ב-DIV ככה שאתה כלל לא תלוי בו.
אתה רק זקוק ל-ID ההודעה על מנת לבדוק את הערך שלה ב-userData שיצרת.
אוקיי אני חייב להסביר את עצמי טוב..
ככה יש לי עמוד של הודעות…
אני משתמש ב-userData בשביל למצוא את ההודעות שכבר נלחצו!
אני אחרי שה-userData הופך את הפורום ל-נלחץ | לא נלחץ אחרי שאני מעלה את הפורום…
אני חשבתי איך אני אעשה את זה בצורה יעילה וגם שלא תפגע בקוד…
אז חבר שלי הציע להשתמש ב-OOP
ואני משתמש בזה