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}))