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