2011-08-02 21 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

相關問題