¿Puedo especificar un retraso antes de que el navegador suba & # 8220; rollover & # 8221; ¿evento?

StackOverflow https://stackoverflow.com/questions/344928

  •  19-08-2019
  •  | 
  •  

Pregunta

Estoy trabajando en una aplicación web ASP.NET que se requiere para abrir una ventana emergente en un roolover. Estoy usando el " OnMouseOver " evento y funciona como se esperaba. El problema es que el evento está en un "disparador de cabello"; incluso un paso casual del mouse sobre el control abre la ventana emergente (que luego debe descartarse manualmente). Quiero agregar un retraso para que un pase rápido sobre el control en cuestión no active el evento. ¿Hay alguna manera de establecer un retraso de este tipo o hay un evento diferente que podría usar para obtener el mismo '' evento de activación en un rollover lento ''?

¿Fue útil?

Solución

Una solución que viene a la mente, sin embargo, puede haber mejores formas:

  1. Haga que el onmouseover llame a la función a través de un setTimeout delay
  2. Dentro de la función, verifique que el mouse esté realmente sobre ese elemento.

También podría usar un onmouseout para borrar el setTimeout , pero luego tendría que almacenar una referencia al temporizador en una variable global para acceder de nuevo .

Otros consejos

Lo que terminé haciendo es lo siguiente (oRow es una fila de tabla pero podría ser cualquier control):

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);

En el evento RowDataBound de la vista de cuadrícula ASP.NET: agregué el siguiente código:

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);";
    } 
}

Funciona bien. Gracias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top