Jquery 传递给插件时函数未定义

Jquery 传递给插件时函数未定义,jquery,Jquery,我写了一个插件来做一些验证,我正在插件的选项中传递一个函数,但是我传递的函数是未定义的,我不知道为什么 在准备好的文档中,我调用了插件 $('#btnSaveBlade').on('click', function () { $('#BladeInputs').AW_Validation({ container: '#BladeInputs', attribute: 'aw-is-required', complete: SaveNewCl

我写了一个插件来做一些验证,我正在插件的选项中传递一个函数,但是我传递的函数是未定义的,我不知道为什么

在准备好的文档中,我调用了插件

$('#btnSaveBlade').on('click', function () {
    $('#BladeInputs').AW_Validation({
        container: '#BladeInputs',
        attribute: 'aw-is-required',
        complete: SaveNewClient("Client")
    });
});
这是插件的一部分

$.fn.AW_Validation = function (options) {
    var settings = $.extend({
        container: null,
        attribute: null,
        //complete: null, // Callback function on successful completion <- didn't work
        complete: function(){},// Callback function on successful completion <- doesn't work either
        summary: null,
        notification: null
    }, options);
    ...
}
$.fn.AW\u验证=功能(选项){
变量设置=$.extend({
容器:null,
属性:null,

//complete:null,//当您将
SaveNewClient(…)
传递给实际调用它的插件时,成功完成时的回调函数,因为它可能返回
未定义的
,这就是您得到的结果

尝试更改:

$('#BladeInputs').AW_Validation({
    container: '#BladeInputs',
    attribute: 'aw-is-required',
    complete: SaveNewClient("Client")
});
为了

或者更好

$('#BladeInputs').AW_Validation({
    container: '#BladeInputs',
    attribute: 'aw-is-required',
    complete: SaveNewClient.bind(null, "Client")
});
编辑:进一步解释

表达式是从内到外求值的,就像运行
{a:1+1}
一样,然后将首先求值
1+1
,结果是
{a:2}

类似于以下函数的情况也会发生:

function onePlusOne() { return 1 + 1; }
让我们看一下以下示例:

$.yourPlugin(
       $.extend({ a: onePlusOne() }, { b: 2}))
然后
onePlusOne()
将首先运行对
2
的求值,然后运行
$.extend({a:onePlusOne()},{b:2})
将对
{a:2,b:2}
求值,这就是
$.yourPlugin()
接收的内容


现在想象一下
onePlusOne()
没有返回值,在这种情况下,javascript将返回
未定义的
,这就是您的
完成的
最终被传递的原因

谢谢。这很有意思。不过,我确实有一个问题,当您解释我的代码在传递函数时被调用的情况时,为什么会这样?当然,我已经解释过了编辑了我的答案,以便有更多的解释空间,希望能有所帮助
$.yourPlugin(
       $.extend({ a: onePlusOne() }, { b: 2}))