我正在尝试使用jQuery“附加”事件函数来调用Page方法,其中我喜欢使用闭包来保持事件目标本地,如下所示,但是页面方法调用声明了几个“错误”函数,我想为他们所有人使用一个功能。如果,在下面的代码中,我处理错误而不是成功,我怎么能使用我的单个匿名处理程序来处理所有3个错误函数?
$(":button").click(function () {
var button = this;
PageMethods.DoIt(
function (a, b, c) {
alert(button);
});
});
此示例传递成功回调的匿名函数。只有其中一个。如果我传递错误回调,我怎么能对所有3个错误回调使用'function(e,c,t)'?
补充:我想在这里做的是每当用户点击一个切换按钮(复选框)时触发一个AJAX调用,但为了提高响应速度,我想立即切换按钮状态,并且只有“解开”它,如果AJAX调用失败。
现在,在我的客户端click()
事件处理程序中,我想在click()' so that the functions have access to the
这个event argument, but I don't want to 'declare' three functions for the
onTimeout ,
onError {{1}的范围内使用匿名函数PageMethods.MyFunction函数的参数。如果我在click处理程序之外声明一个命名函数,它就不再能访问, and 'onAbort
事件处理程序的'this'参数。
答案 0 :(得分:3)
如果您的目标是使此功能不在全球范围内,请使用the module pattern:
(function() {
function asplode() {
alert('Your head asplode.');
}
$('body').click(asplode);
})();
答案 1 :(得分:2)
我认为您可以在其前面放置一个名称变量,如下所示:
var myFunction = function(a, b, c) { ...
我已经有一段时间没有这样做,但你可以尝试一下。
答案 2 :(得分:1)
您必须使用var
为变量分配匿名函数(始终使用var
,否则变量会获取全局范围,这可能会导致意外结果(例如,从不全局声明变量i
)。这是引用它的唯一方法:
var myFunction = function (a, b, c) {
/* tum de dum */
}; // don't forget this semicolon
然后你可以在不同的地方使用这个功能:
$(":button").click(myFunction);
/* don't put braces after the function name when referencing it,
else it will be called immediately */
您可以在文章Named function expressions demystified中找到有关函数表达式和函数声明的更多信息。
答案 3 :(得分:0)
你做不到。 匿名函数的整点是 no name ,因此无法引用 。 (事实上,“匿名”基本上是希腊语中的“未命名”。)
如果你想引用它,你需要给它一个名字。
答案 4 :(得分:0)
从匿名函数内部,您可以将其引用为arguments.callee
(这是实现匿名递归的方式)。
答案 5 :(得分:0)
如果我理解你想做什么,你可以这样做:
function handler(a, b, c) {
alert(this); // button
}
$(":button").click(function () {
var button = this;
PageMethods.DoIt(function () {
handler.call(button, a, b, c);
});
});