使用objects方法作为回调

时间:2011-05-15 20:08:28

标签: javascript jquery javascript-events

我还有另一个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"));
});

没有任何反应 - 除了执行构造函数。我现在已经尝试了几个小时,但是我无法解决这个问题......可能是微不足道的?!?

提前致谢,
斯特

编辑:一个完整​​的例子。

<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 个答案:

答案 0 :(得分:3)

这里最大的问题是在各种情况下使用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);
}