0

我正在开发一个 ASP.NET Web 应用程序,该应用程序需要在 roolover 上弹出一个弹出窗口。我正在使用“OnMouseOver”事件,它按预期工作。问题是事件发生在“触发事件”上;即使鼠标在控件上随意移动也会弹出弹出窗口(然后必须手动关闭)。我想添加一个延迟,以便快速通过相关控件不会触发事件。有没有办法设置这样的延迟,或者我可以使用不同的事件来获得相同的“慢速翻转触发事件”?

4

2 回答 2

3

想到一种解决方案,但可能有更好的方法:

  1. 通过延迟onmouseover调用函数setTimeout
  2. 在函数内部,检查鼠标实际上是否在该元素上。

您也可以使用 anonmouseout来清除setTimeout,但是您必须在全局变量中存储对计时器的引用才能再次获取它。

于 2008-12-05T19:59:20.410 回答
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);";
    } 
}

它工作得很好。谢谢。

于 2008-12-05T20:27:17.873 回答