Используйте метод объектов в качестве обратного вызова - PullRequest
0 голосов
/ 16 мая 2011

У меня есть еще одна проблема JavaScript / jQuery.Минимальный пример может быть таким: у меня есть div, и я хочу, чтобы при запуске мыши выполнялся JavaScript.Но по ряду причин (= в действительности существует много элементов div, и для каждого необходимо сохранять данные) я хочу использовать объект в качестве обработчика для обратного вызова.Вот небольшой пример:

function handler($thediv)
{
   this.somedata = 8;

   $thediv.mouseenter(function() { this.callback(); });
}

handler.prototype.callback = function()
{
   alert(somedata);
}

Объект создается при загрузке документа:

$(document).ready( function() {
  new handler($("div"));
});

Ничего не происходит, кроме того, что выполняется конструктор.Я пытался и искал несколько часов, но я не могу это исправить ... возможно, тривиально?!?

Заранее спасибо,
Jost

Редактировать: полныйпример.

<html>
 <script type="text/javascript" src="jquery-1.6.js"></script>
 </head>
 <body>

  <div>
   blah blahasdasdadsssssssssssssss
asddddddddddddddddddddddddddd
  </div>
 </body>
 <script type="text/javascript">
   $(document).ready(function() {
     new handler($("div"));
  });

  function handler($thediv)
  {
    this.somedata = 8;

    $thediv.mouseenter(this.callback);
  }

  handler.prototype.callback = function()
  {
    alert(somedata);
  }

  </script>
</html>

1 Ответ

3 голосов
/ 16 мая 2011

Самая большая проблема здесь - это использование this в различных контекстах.В функции mouseenter this относится к div, а не к объекту.

Это должно работать:

http://jsfiddle.net/Nx5c7/

function handler($thediv)
{
   this.somedata = 8;
   this.theID=$thediv.attr("id");

   var obj=this;

   $thediv.mouseenter(function() { 
       obj.callback(); 
   });
}

handler.prototype.callback = function()
{
    alert(this.theID + " : " + this.somedata);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...