2010-01-19 80 views

回答

0

從我可以迄今腳本的告訴,下面的代碼塊:

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

+0

感謝您的幫助。你能看看代碼和進一步的建議嗎? – user160820 2010-01-19 14:28:11

0

你應該申報其全球持有日期選擇對象的變量。

var kalender; 
var kalender2; 

function reisedate(d) { 
    document.getElementById("abc").value = d.getDate() + "/" + parseInt(d.getMonth()+1) + "/" + d.getFullYear(); 
} 

// rest of the code 

看看前兩行。

+1

儘管如此,您將不得不爲每個日期選擇器對象實例執行此操作。我會推薦使用閉包來實現完整的代碼可移植性。 – 2010-01-19 14:11:56

+0

我完全同意你:) – kjagiello 2010-01-19 14:33:00