2008-12-05 60 views
0

我正在開發一個ASP.NET Web應用程序,這個應用程序需要在控制器上創建一個彈出窗口。我正在使用「OnMouseOver」事件並按預期工作。問題在於該事件是在「頭髮觸發」上;即使鼠標在控件上的隨意通道也會彈出(然後必須手動解除)。我想添加一個延遲,以便快速傳遞相關控件不會觸發事件。有沒有辦法設置這樣的延遲,或者是否有其他事件可以用來獲得相同的「緩慢翻轉時的觸發事件」?浮現在腦海我可以在瀏覽器引發「滾動」事件之前指定延遲嗎?

回答

3

一個解決辦法,可能有更好的辦法,但:

  1. 通過setTimeout延遲
  2. 在函數內部充分利用onmouseover通話功能,檢查鼠標實際上是在該元素。

你也可以使用一個onmouseout清除setTimeout,但你不得不對計時器的引用存儲在一個全局變量以再次獲得。

0

我最終什麼事做如下(oRow是一個錶行,但它可以是任何控制):

function ItemMouseOver(oRow, "parameters for the popup") 
{ 
    oRow.showTimer = window.setTimeout(function() 
     { 
      alert('popup'); 
     }, 1000); 
} 
function ItemMouseOut(oRow) 
{ 
    if (oRow.showTimer) 
     window.clearTimeout(oRow.showTimer); 

在ASP.NET網格視圖RowDataBound事件:我添加以下代碼:

protected void ReportGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && (
     e.Row.RowState == DataControlRowState.Normal 
     || e.Row.RowState == DataControlRowState.Alternate)) 
    { 
     // get the input values for the popup for the row (stuff deleted) 
     e.Row.Attributes["onmouseover"] = "javascript:ItemMouseOver(this, 
      "parameters for the popup");"; 
     e.Row.Attributes["onmouseout"] = "javascript:ItemMouseOut(this);"; 
    } 
} 

它工作得很好。謝謝。

相關問題