gpt4 book ai didi

javascript - 如何使用参数添加处理程序?

转载 作者:行者123 更新时间:2023-11-29 20:20:36 25 4
gpt4 key购买 nike

如果我尝试传递如下参数: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 runtime error:Sys.ArgumentUndefinedException: Valuecannot be undefined. Parameter name:handler

再次。如果运行这个(没有参数),它会工作:

 $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 runtime error:Sys.InvalidOperationException: Handlerwas not added through theSys.UI.DomEvent.addHandler method.

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

最佳答案

好吧,_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)});

关于javascript - 如何使用参数添加处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com