我有一些requiredfieldvalidators。
当我有一个常规的asp:按钮时,一切顺利。
但是,现在我们已经在提交按钮上实现了OnClientClick事件:
<asp:Button ID="SaveButton" runat="server" Text="Save changes" OnClick="SaveButton_Click" OnClientClick="return SubmitForm2();" />
实现submitform2方法来设置提交按钮的标题(请稍候)并禁用它以避免双击。
function SubmitForm2() {
$("#SaveButton").attr("disabled", "true");
$("#SaveButton").val("Please wait...");
__doPostBack("SaveButton", "");
return true;
}
但我们看到的是,当我们运行此代码时,不会调用clientsidevalidators。
是因为我们自己运行__doPostBack
,否则会触发其他代码(检查验证器)?
答案 0 :(得分:1)
是的 - 回复正在发生,因为您自己正在__doPostBack
。禁用该按钮后,按钮提交行为将被阻止验证器。
更好地实现所需功能的一个方法是将js-timer设置为短时间以禁用按钮,然后设置较长时间以启用按钮。例如,
function SubmitForm2() {
// disable button after 30 ms
setTimeout(function() {
$("#SaveButton").attr("disabled", "true");
$("#SaveButton").val("Please wait...");
// enable button in 15 seconds so that in case validations are
// failed, user can correct and re-submit the page.
setTimeout(function() {
$("#SaveButton").removeAttr("disabled");
$("#SaveButton").val("Save");
}, 15000);
}, 30);
return true;
}
使用validator's client side API可以实现更好的实施。这是一个更简单但更好的修改前一个,
function SubmitForm2() {
// disable button after 30 ms
setTimeout(function() {
$("#SaveButton").attr("disabled", "true");
$("#SaveButton").val("Please wait...");
// enable button in 1 second in case validations are
// failed, user can correct and re-submit the page.
setTimeout(function() {
if (!Page_IsValid) {
// validations failed
$("#SaveButton").removeAttr("disabled");
$("#SaveButton").val("Save");
}
}, 1000);
}, 30);
return true;
}