如果我尝试传递参数,例如: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方法。
无论如何,从按钮中删除点击事件是否很重要?
答案 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...
}