我编写了一个插件进行验证,并在该插件的选项中传递了一个函数,但是传递的函数未定义,因此我不确定为什么
在文档中,我已经将插件称为
$('#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);
...
}
我不确定这是什么问题或问题是什么
答案 0 :(得分:1)
当您将SaveNewClient(...)
传递给插件时,您实际上是在调用它,因为它可能会返回undefined
那就是您所得到的
尝试更改:
$('#BladeInputs').AW_Validation({
container: '#BladeInputs',
attribute: 'aw-is-required',
complete: SaveNewClient("Client")
});
对于
$('#BladeInputs').AW_Validation({
container: '#BladeInputs',
attribute: 'aw-is-required',
complete: function(){ 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将返回undefined
,这就是您的complete
最终被传递的原因