当按下生成id按钮一次时,它将禁用。并显示数字。最后4位“0001”是一个循环,这意味着如果我没有禁用生成id按钮,如果我再次单击该按钮,最后4位数将在结尾添加1“0002”。现在它已被禁用,因为我只希望用户能够生成一次..但是当我按下提交按钮时,我的代码运行并且页面重置(意味着生成ID现在可用于推送)。所以当我再次按下生成ID按钮时,循环再次被重置,这意味着它再次显示“0001”而不是“0002”。当我按下提交按钮时,我可以提出哪些建议,循环不会重置?
var count = 0;
function counter() {
if (document.getElementById("generateid").onclick) {
count++;
return count;
}
}
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
function generateID() {
if (document.getElementById("generateidtxt").value == "") {
var TheTextBox = document.getElementById("generateidtxt");
TheTextBox.value = TheTextBox.value + guidGenerator();
document.getElementById("generateid").disabled = true;
}
}
function guidGenerator() {
var theID = (Year() + "-" + Month() + "-" + Day() + "-" + padDigits(counter(),4));
return theID;
}
<asp:Button ID="Button1" runat="server" Onclick = "Button1_Click"
OnClientClick = "javascript:return SubmitForm();"
Text="Submit" Width="98px"
/>
答案 0 :(得分:2)
您需要使用服务器!具有多个浏览器的客户端无法知道下一个值是什么。服务器应该生成的数字不是客户端!
答案 1 :(得分:0)
所以,如果没有看到您的代码,我可以浮动使用数据库ID作为您的最后四位数的想法吗?我所倡导的是数据库中记录的初始保存,其唯一目的是获取即将成为新记录的ID,然后使用ID值前面的日期。这将允许您的ID是唯一的,并且在重新启动“循环”时不会“重置”为零。当然,如果用户没有提交表单,这会在数据库中创建部分记录的缺点。
只是一个想法。
答案 2 :(得分:0)
如果您的javascript函数SubmitForm()返回true,则单击“提交”按钮时页面将回发它将转到服务器端以执行Button1_Click事件,之后将重置页面。 要解决此问题,您可以使用 updatepanel和out asyncpostback 事件进行提交按钮或,您可以在代码后面执行所有 generateID逻辑代码并存储在viewstate < /强>