我的 ASP.NET Web 应用程序包含一个 JavaScript 函数,该函数将 50 个图像从数据库加载到页面上;用户可以导航到上一页或下一页,或从下拉列表中选择特定页面。
通常,它按预期工作,但发生了一件奇怪的事情:在我使用下拉菜单更改页码后,如果我然后选择下一步按钮,它不会将页码加 1;相反,它将当前页码视为字符串并在其上附加 1。(例如,从 2 到 21,从 10 到 101。)上一个按钮正常工作,如果紧跟在上一个或下一个按钮之后使用,下一个按钮可以工作 - 它只是使用下拉列表的特定组合然后是有问题的下一个按钮。
这是有问题的代码:
function getPageOfPhotos(PageNumber) {
$.ajax({
type: "GET",
url: "/PhotoManager.svc/GetSomePhotos",
data: {"PageNumber": PageNumber},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
ButtonsString = '<table><tr>'
ButtonsString += '<td><div style="text-align:center"><input type="button" value="Prev Page" '
+ 'onclick="getPageOfPhotos(' + (PageNumber - 1).toString() + ')"'
+ (PageNumber < 2 ? ' disabled' : '')
+ ' /></div></td>';
ButtonsString += '<td><div style="text-align:center">Go To Page: '
+ '<select id="GoTo_Page" onchange="getPageOfPhotos(this[this.selectedIndex].value)">';
for (N = 1; N <= Math.ceil(ThumbnailCount / 50); N++) {
ButtonsString += '<option value="' + N.toString() + (N == PageNumber ? '" selected' : '" ') + '>' + N.toString() + '</option>';
}
ButtonsString += "</select></td>";
ButtonsString += '<td><div style="text-align:center"><input type="button" value="Next Page" '
+ 'onclick="getPageOfPhotos(' + (PageNumber + 1).toString() + ')"'
+ (PageNumber * 50 >= ThumbnailCount ? ' disabled' : '')
+ ' /></div></td>';
ButtonsString += '</tr></table>';
for (var D in data) {
// Code that uses the photos themselves snipped
}
},
error: function (HelpRequest, ErrorCode, TheError) {
ButtonsString = "Error getting thumbnails:<br />" + TheError;
},
async: false
});
$(ButtonsDiv).html(ButtonsString);
}
问题似乎与:
'onclick="getPageOfPhotos(' + (PageNumber + 1).toString() + ')"'
PageNumber 应该是一个整数,但 (PageNumber + 1) 被视为 (PageNumber.ToString() + "1")。改成(1 + PageNumber)也有同样的问题,只不过1出现在前面(所以第3页跳转到第13页而不是第4页或第31页);将其更改为 (PageNumber * 1 + 1) 使其正常工作。
这是一个已知的错误,还是我的代码中缺少某些内容?请注意,它对 IE 和 Firefox 都执行此操作。