【发布时间】:2008-12-05 19:54:13
【问题描述】:
我正在开发一个 ASP.NET Web 应用程序,该应用程序需要在 roolover 上弹出一个弹出窗口。我正在使用“OnMouseOver”事件,它按预期工作。问题是事件发生在“触发事件”上;即使是鼠标随意移动到控件上也会弹出弹出窗口(然后必须手动关闭)。我想添加一个延迟,以便快速通过相关控件不会触发事件。有没有办法设置这样的延迟,或者我可以使用不同的事件来获得相同的“慢速翻转触发事件”?
【问题讨论】:
我正在开发一个 ASP.NET Web 应用程序,该应用程序需要在 roolover 上弹出一个弹出窗口。我正在使用“OnMouseOver”事件,它按预期工作。问题是事件发生在“触发事件”上;即使是鼠标随意移动到控件上也会弹出弹出窗口(然后必须手动关闭)。我想添加一个延迟,以便快速通过相关控件不会触发事件。有没有办法设置这样的延迟,或者我可以使用不同的事件来获得相同的“慢速翻转触发事件”?
【问题讨论】:
想到一个解决方案,但可能有更好的方法:
onmouseover 通过setTimeout 延迟调用函数您也可以使用onmouseout 来清除setTimeout,但是您必须将对计时器的引用存储在全局变量中才能再次获取它。
【讨论】:
我最终做的是如下(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);";
}
}
它工作得很好。谢谢。
【讨论】: