2010-01-25 3 views

Répondre

4

Dans les navigateurs qui prennent en charge les DOM du W3C, les événements enregistrés de cette manière se produisent dans la phase de bouillonnement. C'est-à-dire que l'événement de l'élément interne se déclenche avant l'événement de l'élément externe. (Cela devrait être le cas de la plupart des navigateurs modernes ... dans les anciens navigateurs Netscape, c'était le contraire.)

Vous pouvez tester cela assez facilement dans un navigateur donné. Par exemple, essayez de charger cette page de test:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html lang="en"> 
<head> 
    <title>Event order test page</title> 
</head> 
    <body> 
    <div onclick="alert('outer')"> 
     <div onclick="alert('inner')"> 
     ************* 
     </div> 
    </div> 
    </body> 
</html> 
0

La bonne chose au sujet Javascript est que vous pouvez essayer facilement:

<html> 
    <head> 
    <title>Fooscript</title> 
    <script type="text/javascript" language="javascript"> 
     function log(text) 
     { 
     document.getElementById('logger').innerHTML += text + "<br />"; 
     } 
    </script> 
    </head> 
    <body onmousedown="log('body_down');" onmouseup="log('body_up');" onmouseclick="log('body_click');"> 
    <form action="test.php" method="get"> 
     <input type="button" name="foo" value="foo" onmousedown="log('foo_down'); return false;" onmouseclick="log('foo_click'); return false;" onmouseup="log('foo_up'); return false;"/> 
    </form> 
    <div id="logger"> 
    </div> 
    </body> 
</html> 

Il en résulte foo Licenciement avant l'événement du corps.

Questions connexes