2008-11-10 108 views
2

當DropDownList的數據已被加載/綁定到控件上時,是否可以使用客戶端事件?發生這種情況時,我需要觸發事件。DropDownList上的ASP.Net客戶端事件?


基本上,我想在加載數據,就好像有一個放緩鎖定控件(並不少見),用戶可以開始輸入數據,然後失去焦點,因爲他們打字。

我試着在標籤中這樣做,但位於那裏的方法在第一次回傳後似乎停止工作! (任何幫助將不勝感激)。作爲一種解決方法,我嘗試將事件附加到元素本身,並在鎖定時使用onchange事件,但無法在數據成功加載時解鎖它!

任何想法?感謝迄今爲止的答案:)

回答

3

由於數據將在服務器端綁定,因此您沒有針對該特定事件的客戶端事件,但是,一個頁面已經渲染,數據將存在,因此您可能需要運行客戶端腳本在document.load事件中,或者使用類似jQuery的document.ready事件。這會觸發腳本在頁面(包括綁定的下拉列表)完成加載後運行。

1

傑森在這裏是正確的,你不能「通知」客戶端,當發生這樣的事件。有一件事你可以做,就是調用Page.RegisterStartupScript()方法在頁面加載完成後(並且假定已經完成了你的數據綁定的回發)完成JavaScript的操作。同樣,這裏假設你想在數據綁定完成後在客戶端做一些事情,而不是服務器端。

1

您是否可以在您的應用程序中使用ASP.NET AJAX?如果是這樣,您可以讓選定的事件打開一個模式對話框,您可以在填充下拉列表時顯示「處理」文本。這樣用戶就無法訪問任何其他控件,並且可以無需擔心地執行所需操作。

+0

歡呼聲,但我使用$(文件)。就緒()方法固定它。更改觸發器的blockUI方法,並且當回發完成時,它會被解鎖:) – Damien 2008-11-13 15:17:48

0

我在我的網站的母版頁中使用以下代碼。這會阻止用戶在完全綁定之前嘗試使用控件。我發現如果一個控件沒有完全綁定(慢速連接),那麼頁面就會打開。

實質上,如果頁面沒有完成,腳本就會劫持帖子。允許用戶在頁面處理完成之前不做任何事情。一年前我寫了這篇文章,而且非常方便。

  1. 首先設置在onload體標籤setdopostback()

  2. 在主體上的憑證塊添加此。

    var boolDoPostBack = false; 
    
        if (__doPostBack) 
        { 
         // save a reference to the original __doPostBack 
         var __oldDoPostBack = __doPostBack; 
    
         //replace __doPostBack with another function 
         __doPostBack = AlwaysFireBeforeFormSubmit; 
        } 
        function setdopostback() 
        { 
         boolDoPostBack = true; 
        } 
        function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument) 
        { 
         var x= document.readyState 
    
         if (x != "complete") 
         { 
          if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded") 
          { 
           //do nothing with IE postback 
          } 
          else if (!boolDoPostBack) 
          { 
           //do nothing with FireFox postback 
          } 
          else 
          { 
           //alert('Allow Postback 1'); 
           return __oldDoPostBack (eventTarget, eventArgument); 
          } 
         } 
         else 
         { 
          //alert('Allow Postback 2'); 
          return __oldDoPostBack (eventTarget, eventArgument); 
         }  
        }