这是jquery回调中的错误,还是它应该像这样工作?

时间:2016-01-26 10:16:11

标签: jquery plugins callback

通常回调一次只能回调一个值。如果要回调多个值,则必须使用数组。 我发现这是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()是回调的命令,括号内的任何内容都只是变量。

所以我认为你肯定回答了我的问题。换句话说,我一直在使用它,但幸运的是我的回调正在运行,因为我使用变量名称回调。我想我应该改变这些以避免将来混淆。谢谢你的帮助。

1 个答案:

答案 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")

希望这可以解释插件中发生了什么 - 您传递给初始化插件的函数的额外参数将自动传递回您的回调 - 它是您编写插件的全部方式。你没有解释你的插件试图用回调做什么,也没有解释你如何调用回调函数本身。