通常回调一次只能回调一个值。如果要回调多个值,则必须使用数组。 我发现这是jquery函数的情况。
但我遇到了一些奇怪的事情,我不确定这是一个错误,还是一个意外的功能。
我正在写一个插件,我以某种方式设法回调了多个项目。 问题是,我不知道它是不是一个错误,但它确实有效,而且我担心如果我自己会遇到这个问题。
好的,我的插件名为mydialogue。它基本上是jquery ui对话的扩展,但是我需要一些额外的东西。 好的,我的插件就像这样开始
$.fn.mydialogue = function(options,callback,message){
我有一个回调和一个消息变量。
现在通常你会使用这样的回调。
callback(value);
但我已经完成了这个
callback(value,message);
我像这样运行我的插件
$('text').mydialogue({
title : "Note",
message : data.Note,
width : "420",
maxlength : "200",
textid : "Condition_update",
mybuttons : ["Update", "Cancel"]
}, function (callback, message) {
alert(message);
});
它正在提醒消息,但这看起来我已经在回调中发回了两个值,但肯定它不应该工作,但奇怪的是它确实如此。
问题是回调如何发回两个项目,应该是吗? 另一个问题是,我是通过这样做会导致自己出现问题,还是因为这只是一个侥幸或jquery中的错误?
我现在已经使用了一个函数,因此无需从函数发回数组。好吧,我现在看到它的方式就是这个。如果我错了,请纠正我。
每当你做回调。喜欢 回调(值,消息,玩具);
当它返回时,回调的值将始终是第一项。例如价值
so the following code gives me the value
$('text').mydialogue({
title : "Note",
message : data.Note,
width : "420",
maxlength : "200",
textid : "Condition_update",
mybuttons : ["Update", "Cancel"]
}, function (callback, message) {
alert(callback);
});
我添加到回调中的任何其他项目我必须在回调关键字之后添加,例如
$.fn.mydialogue = function(options,callback,message,toys){
所以如果我想从回调中得到这些,我会做
$('text').mydialogue({
title : "Note",
message : data.Note,
width : "420",
maxlength : "200",
textid : "Condition_update",
mybuttons : ["Update", "Cancel"]
}, function (callback, message,toys) {
alert(callback);
alert(message);
alert(toys);
});
如果这是正确的,请告诉我。我需要一段时间才能理解某些东西。我不像有些人那样快速学习。
好的,我接近理解这一点。 你输入的代码就是这个。
function myFunction(callback, arg1,arg2){
// do something interesting here!
// call the callback function, passing it arguments if you wish
callback(arg1,arg2)
}
我明白这会奏效,但我或多或少都这样做了。
function myFunction(callback, arg1,arg2){
// do something interesting here!
// call the callback function, passing it arguments if you wish
var value=10;
callback(value,arg1,arg2)
}
在我的回调中,我得到了从回调中返回的值变量,即使我没有在函数参数中指定它。
例如,如果我调用了函数
myfunction(function(callback,arg1,arg2){
alert(callback);
});
如果我这样做,当我提醒回调时,我得到值变量的值,当然是10。我只想了解为什么会这样。我以为我做错了什么,但它确实有效,但我担心它是否正常工作。
我没有显示我的所有插件代码,因为我认为这是问题的无关紧要。所以我只展示了我认为需要展示的代码。
是Jamiec我很困惑,这就是为什么我首先发布了这个问题。 所以函数名中的单词回调实际上只是一个变量。那么实际上我可以这样做吗?
function myFunction(value, arg1,arg2){
// do something interesting here!
// call the callback function, passing it arguments if you wish
var value=10;
callback(value,arg1,arg2)
}
所以我看到的方式是,callback()是回调的命令,括号内的任何内容都只是变量。
所以我认为你肯定回答了我的问题。换句话说,我一直在使用它,但幸运的是我的回调正在运行,因为我使用变量名称回调。我想我应该改变这些以避免将来混淆。谢谢你的帮助。
答案 0 :(得分:1)
这里没有错误,javascript函数的参数有些流畅,因为我可以定义这样的函数:
function aFunction(arg1){...}
然而这样称呼:
aFunction("someValue",123)
没有不良影响 - 我实际上可以使用arguments
数组(arguments[1] // <-- has value 123
)访问该非指定参数。
我也可以这样做,我可以定义一个这样的函数:
function bFunction(arg1,arg2){...}
然而这样称呼:
bFunction("someValue")
在这种情况下,arg2
的值只是undefined
关于您的编辑,您严重误解了callback
正在做什么,以及如何使用它。
暂时忘记插件,只需想想javascript即可。如果您定义这样的函数:
function myFunction(callback){..}
打算将函数引用传递给回调函数:
//call myFunction, passing a fuunction reference to the first argument
myFunction(function(){..});
它没有神奇地传递你在接受回调的函数上定义的任何进一步的参数,即,如果你将上面的函数更改为
function myFunction(callback, arg1,arg2){..}
然后callback
函数不会神奇地通过arg1
&amp; arg2
!它是如何在重要的函数内调用callback
你自己的。如果我希望这种情况发生,我需要对其进行适当的编码
function myFunction(callback, arg1,arg2){
// do something interesting here!
// call the callback function, passing it arguments if you wish
callback(arg1,arg2)
}
然后可以像上面那样调用上面的函数
myFunction(function(a1,a2){
// arg1 & arg2 only passed in to this callback because thats how I coded it above
},"valueForArg1","valueForArg2")
希望这可以解释插件中发生了什么 - 您传递给初始化插件的函数的额外参数将不自动传递回您的回调 - 它是您编写插件的全部方式。你没有解释你的插件试图用回调做什么,也没有解释你如何调用回调函数本身。