JavaScript中的日历类 - 无法保留参考。

问题描述:

我用Javascript写了一个约会工具,但工作不正常,JavaScript中的日历类 - 无法保留参考。

因为我失去了对日历对象的引用。

这里是由输入字段中的日历将显示在点击的例子

http://asexpress.de/calendar/

我应该怎么做,对日历对象的引用保持联系。

从我可以迄今脚本的告诉,下面的代码块:

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

你应该申报其全球持有日期选择对象的变量。

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