如何使用参数addHandler?

时间:2010-11-06 15:44:26

标签: javascript javascript-events

如果我尝试传递参数,例如:this._Click(i)我收到错误。

 BBtor = function(element) {
//some code

}   
 BBtor.prototype = {


    initialize: function() {
      for (var i = 0; i < 3; i++) {
       $addHandler($get("Button"+i),'mouseup' , this._Click(i));
      }
    },

    _Click: function(param) {
           alert(param);
    }
}

我得到的错误:

  

Microsoft JScript运行时错误:   Sys.ArgumentUndefinedException:Value   不能不定义。参数名称:   处理

再次。如果运行此(没有参数),它可以工作:

 $addHandler($get("Button"+i),'mouseup' , this._Click);

如果我试试这个:

 $addHandler($get("Button"+i),'mouseup' , this._Click(i));

它不起作用。


这对我有用:

$addHandler($get("Button"+i),'mouseup' , function(xx) { return function() { that._Click(xx) } } (i)); 

但是我得到了另一个问题。如何删除dispose函数中的处理程序?

dispose: function() {             
      for (var i = 0; i < 3; i++) {
     var that = this;
         $removeHandler($get("Button"+i),'mouseup' , function(xx) { return function() { that._Click(xx) } } (i));          

    },

我收到错误:

  

Microsoft JScript运行时错误:   Sys.InvalidOperationException:处理程序   没有添加通过   Sys.UI.DomEvent.addHandler方法。

无论如何,从按钮中删除点击事件是否很重要?

2 个答案:

答案 0 :(得分:2)

好的,_Click是一个函数,但_Click(i)不是 - _Click(i)是传入函数返回时的值 {{1}作为参数。在这种情况下,i_Click(i),因为undefined不包含任何_Click语句。也许你想要这样的东西:

return

即使var that = this; $addHandler($get("Button"+i),'mouseup' , function() {that._Click(i)}); 在外部函数i中定义,它也可以在内部(匿名)函数initialize中访问。

对于function() {that._Click(i)}这个问题,这是必要的,因为在内部函数内部,that = this的值会发生变化(我不确定在这种情况下会改变什么,但它可能赢了不是你的期望。另一种方法是:

this

答案 1 :(得分:1)

我找到this,希望它有所帮助。

似乎你必须接受两个参数,因为假设e在那里。

  

var args = new Array();
      args [0] = someVariable;
      args [1] = someOtherVariable;
      $ addHandler(button,'click',Function.createCallback(ButtonClicked,args));
  

function ButtonClicked(e, args)
{
 Useful code...
}