我有一个将处理程序附加到事件的函数,当它传递给一个匿名函数时它正在工作但是当我将该函数声明为对象中的一个字段时它不起作用并且处理程序是未定义的
validationObj = (function(API){
this.validate = function (id2, idN2){
//code
//doesn't work
//this way i get an handler.guid error on functionFromMyApi
API.attach_events( {"keyup": run_func(id1, id2) },"id");
// work's ok
API.attach_events( {"keyup": function(){
// same code here from run_func
}
},"id");
//code
};
var run_func = function (id1, id2){
var obj1 = document.getElementById(id1);
var obj2= document.getElementById(id2);
var show_err = false;
API.functionFromMyApi ();
//code
// more code
};
})(api);
我使用的是jQuery 1.2.6
答案 0 :(得分:1)
当你这样做时:
API.attach_events( {"keyup": run_func(id1, id2) },"id");
你没有传递一个函数引用,就像你使用匿名函数时那样,而是调用run_func
并传递它的返回值。如果run_func
没有参数,那么你可以这样做:
API.attach_events( {"keyup": run_func},"id");
但是,既然如此,你仍然需要使用匿名函数:
API.attach_events( {"keyup": function() {run_func(id1, id2)} },"id");