2011-08-02 35 views
0

我有一些requiredfieldvalidators。asp.net requiredfieldvalidators,为什么他们没有发射,当我有OnClientClick实施

当我有一个常规的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; 

    } 

但是我们看到的是当我们运行这个代码时,clientidevalidators没有被调用。

是因为我们自己运行了__doPostBack,否则其他代码(检查验证器)是否被触发?

回答

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; 
     } 
+0

谢谢,你已经把我设置在正确的方向 – Michel

相关问题