Показать сообщение отдельно
  #1 (permalink)  
Старый 05.03.2010, 01:30
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

вопр. замыкание
Что-то не могу понять, зачем здесь замыкание?:
Из книги jQuery Подробное руководство по продвинутому JavaScript
"Пример выводит имя тега и значение атрибута id текущего элемента,
создавая замыкание, после этого выводится значение атрибута id элемента, для которого предназначено событие."

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html id="greatgreatgrandpa">
  <head>
    <title>DOM Level 0 Bubbling Example</title>
    <script type="text/javascript" src="../scripts/jquery-1.2.1.js">
    </script>
    <script type="text/javascript">
      $(function(){
        $('*').each(function(){
          var current = this;
          this.onclick = function(event) {
            if (!event) event = window.event;
            var target = (event.target) ?
                         event.target : event.srcElement;
            say('For ' + current.tagName + '#'+ current.id +
                ' target is ' + target.id);
          }
        });
      });

      function say(text) {
        $('#console').append('<div>'+text+'</div>');
      }
    </script>
  </head>

  <body id="greatgrandpa">
    <div id="grandpa">
      <div id="pops">
        <img id="vstar" src="vstar.jpg"/>
      </div>
    </div>
    <div id="console"></div>
  </body>
</html>



Можно же так, и вроде нет в этом криминала:
<script type="text/javascript">
      $(function(){
        $('*').each(function(){
          //var current = this;
          this.onclick = function(event) {
            if (!event) event = window.event;
            var target = (event.target) ?
                         event.target : event.srcElement;
            say('For ' + this.tagName + '#'+ this.id +//замыкание не требуется
                ' target is ' + target.id);
          }
        });
      });

      function say(text) {
        $('#console').append('<div>'+text+'</div>');
      }
    </script>
Ответить с цитированием