2010-07-13 9 views
0

Je dois créer un shim pour la page entière pour capturer les événements de clic, mais le shim ne doit pas arrêter d'autres événements comme mouseover etc sur les autres éléments html sur la page.Créer un shim superposant la page entière, mais permettant des événements mouseover en arrière-plan

J'ai une solution qui fonctionne, mais j'ai quelques problèmes avec ça: Quand je clique sur la page, si je clique directement sur du texte, l'événement click de la cale ne se déclenche pas il n'y a pas d'annulation d'événement sur la page).

Le problème onclick n'apparaît que dans IE.

FF et Chrome il y a un problème avec les événements mouseover ne sont pas tirés en arrière-plan, donc je bien sûr apprécier des conseils sur la résolution que ... ainsi

Voici un exemple très basique manifestaient le problème.

Des idées? :-)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <style type="text/css"> 
     body 
     { 
      font-size:20px; 
      height:100%; 
     } 
     #shim 
     { 
      position: absolute; 
      padding: 0; 
      margin: 0; 
      top: 0px; 
      left: 0px; 
      width: 100%; 
      height: 100%; 
      zindex: 1; 
     } 
     #trace 
     { 
      border: 1px solid #ccc; 
      height: 100px; 
     } 
    </style> 

    <script type="text/javascript"> 
     function trace(e) { 
      e = e || event; 
      document.getElementById('trace').innerHTML = "Hovered innerHTML: " + (e.target || e.srcElement).innerHTML; 
     } 
    </script> 

</head> 
<body> 
    <div id="shim" onclick="alert('shim clicked')"> 
    </div> 
    <table border="1" onmouseover="trace(event)"> 
     <tr> 
      <td> 
       AAAAAA AAAAAA 
      </td> 
      <td> 
       BBBBBB BBBBB 
      </td> 
      <td> 
       CCCCCCCC CCCCC 
      </td> 
      <td> 
       DDDDDD DDDDDDDDDD 
      </td> 
      <td> 
       EEEEEE EEEE 
      </td> 
      <td> 
       FFFFFF FFFFF 
      </td> 
      <td> 
       GGGG GGGGGGGG 
      </td> 
      <td> 
       EEEE EEEE 
      </td> 
      <td> 
       FFFF FFFFFF 
      </td> 
     </tr> 
    </table> 
    <div id="trace"> 
    </div> 
</body> 
</html> 

Répondre

0

Je ne sais pas s'il est possible de résoudre votre problème, mais je l'ai fait quelque chose comme il y a quelques semaines qui fonctionne pour moi. Fondamentalement, je crée un gestionnaire d'événements global, en enregistrant tous les événements dont j'ai besoin dans l'élément de document et puis, en utilisant event.srcElement ou event.element, j'ai pu obtenir l'élément qui déclenche l'événement en premier lieu. Basé sur l'événement et l'élément, je peux décider quoi faire.