我用Javascript寫了一個約會工具,但工作不正常,JavaScript中的日曆類 - 無法保留參考。
因爲我失去了對日曆對象的引用。
這裏是由輸入字段中的日曆將顯示在點擊的例子
。
我應該怎麼做,對日曆對象的引用保持聯繫。
我用Javascript寫了一個約會工具,但工作不正常,JavaScript中的日曆類 - 無法保留參考。
因爲我失去了對日曆對象的引用。
這裏是由輸入字段中的日曆將顯示在點擊的例子
。
我應該怎麼做,對日曆對象的引用保持聯繫。
從我可以迄今腳本的告訴,下面的代碼塊:
Kalender.prototype.writeMonth = function() {
var that = this;
包含了一些代碼進一步下跌:
else if (this.isToday(displayNum, length) && this.isLink(displayNum, length))
{
sbuffer.push('<td class="date" onClick="that.changeDate(this,\''
+ this.id + '\'); that.returnDate('+ this.month +','+ this.year+')">' + displayNum + '</td>');
}
這會導致一個問題,因爲that
變量在此函數的範圍內聲明,並且onclick事件將在範圍外觸發。海事組織,建立HTML並不是這裏最好的方法。最好使用DOM構建表格單元格,並添加處於函數範圍內的事件處理程序。這發生了幾次。
僅供參考,您正在使用eval()
而不必要在你的代碼:
this.months = eval("config.language."+ this.options['language'] +".months");
// Can also be written as:
this.months = config.language[this.options['language']].months;
更多信息請參見Eval is Evil。
進一步閱讀
MSDN - Building Tables Dynamically
MDC - Traversing an HTML table with JavaScript and DOM Interfaces
MDC - Working with Closures
你應該申報其全球持有日期選擇對象的變量。
var kalender;
var kalender2;
function reisedate(d) {
document.getElementById("abc").value = d.getDate() + "/" + parseInt(d.getMonth()+1) + "/" + d.getFullYear();
}
// rest of the code
看看前兩行。
儘管如此,您將不得不爲每個日期選擇器對象實例執行此操作。我會推薦使用閉包來實現完整的代碼可移植性。 – 2010-01-19 14:11:56
我完全同意你:) – kjagiello 2010-01-19 14:33:00
感謝您的幫助。你能看看代碼和進一步的建議嗎? – user160820 2010-01-19 14:28:11