04-03-2010, 23:29
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
לפני ביצוע debugging או המשכה בכתיבת הקוד, אני ממליץ לבצע הזחות כראוי בכולו. אחרת, רק לקרוא אותו יהיה קשה.
עשיתי הזחות וסידרתי אותו:
קוד:
function timer(days,time,msg,path) {
this.days = days;
this.time = time;
this.msg = msg;
this.path = path;
this.display = function() {
el = document.getElementById(this.path);
el.innerHTML = this.days + " : ימים שנותרו" + "<br>" +
this.time + " : שעות " ;
};
this.stop = function() {
alert(this.msg);
clearInterval(x);
};
this.run = function() {
x = setInterval("countdown()" , 1000);
};
}
function countdown() {
th = this.time.substr(0, 2);
tm = this.time.substr(3, 2);
ts = this.time.substr(6, 2);
if (ts > 0) {
ts = (ts < 11)? '0'+(ts - 1):(ts - 1);
}
else {
if (tm > 0) {
tm = (tm < 11)? '0'+(tm - 1):(tm - 1);
ts = 59;
}
else {
if (th > 0) {
th = (th < 11)? '0'+(th - 1):(th - 1);
tm = 59;
ts = 59;
}
else{
if (this.days > 0){
this.days = this.days - 1
th = 23;
tm = 59;
ts = 59;
}
else{
this.stop();
}
}
}
}
this.time = th + ":" + tm + ":" + ts;
this.display();
}
//var t = new timer(0,'00:00:04','roe','roe2')
//t.run();
זה עדיף ככה מפני שיש פחות סיכויים להתנגשות עם שם של פונקציה אחרת.
מה שעשית לא עובד, כי לא קראת לפונקציה countdown על ידי האובייקט t שאליו ביצעת הקצאה new timer. אלא קראת לפונקציה countdown בצורה הבאה:
קוד:
x = setInterval("countdown()" , 1000);
הרי המילה this תלויה באובייקט שממנו בוצעה הקריאה. כיוון שהקריאה לא בוצעה ע"י אובייקט מסויים, אז המילה this שייכת לאובייקט window, שאין לו מאפיין time.
לכן יש לתקן את זה ל:
קוד:
x = setInterval("t.countdown()" , 1000);
במידה והאובייקט t גלובאלי.
אתה יכול לראות את זה בפעולה במסמך ה-HTML הזה: JS_Calls.html
|