Когда встроенные события запускаются в JavaScript? - PullRequest
2 голосов
/ 25 января 2010
<input onclick=".." />

Я имею в виду bubbling phase или capture phase

Ответы [ 3 ]

6 голосов
/ 25 января 2010

Фаза Bubling. Вы можете перейти по этой ссылке http://www.quirksmode.org/js/events_order.html

4 голосов
/ 29 января 2010

В браузерах, которые поддерживают W3C DOM, события, зарегистрированные таким образом, происходят в фазе пузырьков. То есть событие внутреннего элемента срабатывает до события внешнего элемента. (Это должно относиться к большинству современных браузеров ... в старых браузерах Netscape все было наоборот.)

Вы можете легко проверить это в данном браузере. Например, попробуйте загрузить эту тестовую страницу:

<!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 голосов
/ 03 февраля 2010

Преимущество Javascript в том, что вы можете легко его опробовать:

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

Это приводит к запуску foo перед событием body.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...