仅在页面有效时禁用提交按钮

问题描述:

我无法获得此功能以适应我的生活。我需要提交按钮才能在所有验证完成后禁用,然后让页面发布到OnClick函数。仅在页面有效时禁用提交按钮

我有一个填充RequiredFieldValidators和ValidationSummary的表单。现在它验证和按钮得到禁止,但页面不继续发布,它只是停留在这种状态下撑:

enter image description here

我的按钮

<asp:Button ID="Button3" runat="server" OnClick="Submit_Form" CssClass="btn btn-primary" 
       Text="Submit" OnClientClick="return disableOnSubmit(this);" /> 

JS禁用按钮

<script type="text/javascript"> 
function disableOnSubmit(target) { 
    if (typeof (Page_ClientValidate) == 'function') { 
     if (Page_ClientValidate() == false) { return false; } 
    } 
     target.value = 'Please wait...'; 
     target.disabled = true; 
     return true; 
} 
</script> 

我试图阻止用户提交表单两次。按钮应该在用户点击它之前禁用,然后再将它们带到下一页。

+0

你说这个不正确..?你的意思是你想让按钮被禁用,直到所有必填字段被填充/或验证..?你可否确认..? – MethodMan 2014-10-21 21:45:06

+0

不,相反,我希望按钮处于活动状态,并且一旦填写了所有必填字段,并且用户点击了提交按钮,就会禁用它,以防止他们提交表单两次。 – techora 2014-10-21 21:50:24

+0

你需要在asp里面有这样的内容:按钮标记 'OnClientClick =“if(Page_ClientValidate(......'这里是一个例子http://*.com/questions/14490556/disable-webform -button-after-validation-before-postback – MethodMan 2014-10-21 21:54:17

那么,我经常使用Javascript库Valid 8。节省一些时间验证,否则我会做什么会是这样的(原始例)

<asp:LinkButton 
    Id="btnSubmit" runat="server" 
    Text="Submit" CssClass="btn btn-Primary" 
    OnClientClick="return Submit()" /> 

当按钮被点击时,它会调用我们的功能Submit

function Submit() { 
    var value = $("#txtField").Val(); 
    if(value != '') { 
      if(!confirm("Are you sure you would like to submit?")) { 
       return false; 
      } else { 
       return true; 
       // Be aware Link Button can have issue in Asp.Net sometimes. 
      } 
    } 

因此验证发生在客户端上。现在,你只要把这个在您的Page_Load

btnSubmit.Click = new EventHandler("btnSubmit_Click"); 

然后把为Postback的数据btnSubmit_Click像这样:

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    // Do Something. 
} 

这就是我会做,主要是为了避免不必要的Postbacks的办法。请记住我的Javascript例子是相当原始的,只是确保它不是null

刚刚看了你希望避免多个提交,你可以做一个Session Variable避免它或者干脆:

if(Page.IsPostBack) 
{ 
    btnSubmit.Enabled = false; 
} 

这将去一个Page_Load。显然任何Postback虽然会立即禁用按钮。所以你可能想在实际实现之前确保在你的实现中起作用。

+0

唯一的问题是你要求我重写当前使用RequiredFieldValidators的所有30个字段的验证。我还没有准备好放弃那些。作为最后的手段,我一定会牢记你的建议。谢谢。 – techora 2014-10-21 22:09:13

+0

这不完全正确,您可以添加适用于所有三十个字段的“类”。然后循环进行验证。 – Greg 2014-10-21 22:14:31