2008-12-05 5 views
0

Je travaille sur une application Web ASP.NET qui est nécessaire pour faire apparaître une fenêtre contextuelle sur un retour. J'utilise l'événement "OnMouseOver" et cela fonctionne comme prévu. Le problème est que l'événement est sur un "déclencheur de cheveux"; même un passage occasionnel de la souris sur le contrôle fait apparaître le popup (qui doit ensuite être manuellement rejeté). Je veux ajouter un délai afin qu'un passage rapide sur le contrôle en question ne déclenche pas l'événement. Y a-t-il un moyen de définir un tel retard ou existe-t-il un événement différent que je pourrais utiliser pour obtenir le même "événement déclencheur sur un roulement lent"?Puis-je spécifier un délai avant que le navigateur déclenche l'événement "rollover"?

Répondre

3

Une solution qui vient à l'esprit, il peut y avoir de meilleures façons cependant:

  1. Faire l'appel onmouseover la fonction via un setTimeout retard
  2. l'intérieur de la fonction, vérifiez la souris est en fait sur cet élément.

Vous pouvez également utiliser un onmouseout pour effacer le setTimeout, mais vous auriez à stocker une référence à la minuterie dans une variable globale pour obtenir à nouveau.

0

Ce que je fini par faire est la suivante (oRow est une ligne de table mais il pourrait être tout contrôle):

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 cas de vue réseau ASP.NET de RowDataBound: J'ai ajouté le code suivant:

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

Cela fonctionne très bien. Merci.

Questions connexes