我可以在浏览器引发“翻转”事件之前指定延迟吗?

时间:2008-12-05 19:54:13

标签: html mouseover

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

2 个答案:

答案 0 :(得分:3)

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

  1. onmouseover通过setTimeout延迟
  2. 调用该功能
  3. 在函数内部,检查鼠标实际上是在该元素上。
  4. 你也可以使用onmouseout清除setTimeout,但是你必须在全局变量中存储对计时器的引用才能再次获取它。

答案 1 :(得分: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);";
    } 
}

它运作得很好。感谢。