我正在开发一个日历功能,用于在我们的CMS中显示数据库表数据。
我在JS中生成一个Calendar Table。数据库条目在C#中生成并放入数组中。最终结果如下所示:
var Termine = new Array(4);
Termine[0] = {
ID:1,
Datum:1442912403000,
Titel:"Test",
Detail:"Some encoded HTML"
};
Termine[1] = {
ID:2,
Datum:1444306500000,
Titel:"Testing a bit more",
Detail:"Some encoded HTML"
};
Termine[2] = {
ID:3,
Datum:1442880000000,
Titel:"Test 2",
Detail:"Some encoded HTML"
};
Termine[3] = {
ID:4,
Datum:1442932140000,
Titel:"Test 3",
Detail:"Some encoded HTML"
};
现在我在函数中循环遍历此数组并将约会(div)添加到表中:
function addTermine() {
for (var i = 0; i < Termine.length; i++) {
var t = Termine[i];
var d = new Date(t.Datum);
d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);
if (d.getFullYear() === currentYear && d.getMonth() === currentMonthInt-1) {
var ID = d.getFullYear() + "-" + d.getMonth() + "-" + d.getDate();
var longID = d.getFullYear() + "-" + d.getMonth() + "-" + d.getDate() + "-" + d.getHours() + "-" + d.getMinutes();
var hour = d.getHours();
if (hour < 10) hour = "0" + hour;
var min = d.getMinutes();
if (min < 10) min = "0" + min;
var s = "<div id=\"ter" + longID + "\" class=\"termin\" onmouseover=\"showDetail(event,'detail" + longID + "');\" onmouseout=\"hideDetail('detail" + longID + "');\">" + hour + ":" + min + "<br>" + t.Titel + "</div>";
$("#cont" + ID).html($("#cont" + ID).html() + s);
$("#ter" + longID).click(function () {
location.href = window.location.href + "?cid=" + cid + "&col=" + t.ID + "&details=1";
});
var detail = "<div id=\"detail" + longID + "\" class=\"hoverDetail\">" + unescape(t.Detail) + "</div>";
$("body").append(detail);
}
}
}
问题是当第一次执行此函数时(从document.ready
),for循环只执行一次,即使调试器中Termine.length
为4。当我在更改月份后执行该功能以加载月份约会时,它会正确执行。
如果有人能指出我为什么在第一次尝试时没有正确执行,我将不胜感激。
我在我们的开发网站上测试它,随时可以调试它。
答案 0 :(得分:2)
您的第一个日历元素会使用网址<script>
将/xtend/javascript/messages_de.js
元素添加到dom中。当浏览器加载此脚本时,会导致javascript错误
$。验证器未定义
此javascript错误导致进一步的javascript处理停止。还有竞争条件,有时javascript会在加载坏脚本之前继续运行,在这种情况下,你会在日历上获得4个新的div。
发生错误是因为新注入的javascript代码正在尝试使用您未包含的jQuery validate plugin。