我正在javascript/asp.net中構建日曆。在javascript循環中調用ASP.NET Webservice會導致問題
當我打印日曆時,我想每天檢查是否有項目(約會)要顯示。這裏是功能的一部分:
for (var i = 1; i <= monthdays[month - 1]; i++) {
curnum++;
td = tr.insertCell(-1);
td.style.height = "95px";
td.style.width = "131px";
html = "<div id=\"divday" + year + "" + month + "" + i + "\" style=\"position:relative; left:0px; top:0px; width130px; height:95px; background-color:" + colors[i % 2] + "; cursor:pointer; \" onclick=\"openDay(" + year + "," + (month < 10 ? "0" + month : month) + "," + (i < 10 ? "0" + i : i) + ")\">";
html += "<div class=\"blackl\" style=\"position:absolute; left:100px; top:0px; width:30px; height:20px; text-align:right; \">" + i + "</div>";
html += "</div>";
td.innerHTML = html;
if (curnum == 7) {
tr = tbl.insertRow(-1);
curnum = 0;
}
if(i == 1) RCalendar.GetCalendarEvents(agentid, year, month, i, function (result) { setCalendarEvents(year, month, i, result) });
最後一行不應該有if(i == 1)它只是爲了調試。我想打電話給web服務,並寫下這些日子(i)的項目。
這裏是回調函數:
function setCalendarEvents(y, m, d, result) {
var daydiv = document.getElementById("divday" + y + m + d);
for(var i = 0; i < result.length; i++) {
var thiscalendaritem = result[i];
daydiv.innerHTML += makeCalendarItem(thiscalendaritem);
}
}
如果我把一個斷點在Web服務調用,並在callbackFunction參數,i和d是不一樣的。當它被調用時,我是1(顯然),但在setCalendarEvents被調用時,d是31.
關於從服務器獲取所有事件而不是每天有意義的第一條評論,並且我將它解決爲這樣:(在繪製日間divs的循環之後...) 'getAllCalendarItemsInMonth(agentid,year,month ); (agentid,year,month){ } 函數getAllCalendarItemsInMonth(agentid,year,month) } '也感謝divday + datestring,但由於這個日曆一次僅顯示一個月,所以這不是一個主要問題。 – Jesper