Как добавитьHandler с параметром? - PullRequest
2 голосов
/ 06 ноября 2010

Если я пытаюсь передать параметр следующим образом: 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: значение не может быть неопределенным.Имя параметра: обработчик

Снова.если запустить это (без параметра), это будет работать:

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

2 голосов
/ 06 ноября 2010

Хорошо, _Click - это функция, но _Click(i) - нет - _Click(i) - это значение, которое функция возвращает , когда вы передаете 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 изменится (я не уверен, что изменится на это в этом случае, но, вероятно, это не то, что вы ожидаете). Еще один способ сделать это просто:

$addHandler($get("Button"+i),'mouseup' , function() {BBtor._Click(i)});
1 голос
/ 11 августа 2011

Я нашел это , надеюсь, это поможет.

Похоже, вам нужно принять два аргумента, поскольку предполагается, что e существует.= новый массив ();args [0] = someVariable;args [1] = someOtherVariable;$ addHandler (button, 'click', Function.createCallback (ButtonClicked, args));

function ButtonClicked(e, args)
{
 Useful code...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...